summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2010-11-22 16:13:02 -0500
committerNicolas Roard <nicolas@android.com>2010-11-22 15:04:52 -0800
commit90455eb70cca2df540942299b35bb3bd8261cb0b (patch)
treebd3e7b531e3673cd1bf669515940255f41d3c050 /WebCore
parentac26ff1e3f26e75d7b21ffb87019984faee4e1cf (diff)
downloadexternal_webkit-90455eb70cca2df540942299b35bb3bd8261cb0b.zip
external_webkit-90455eb70cca2df540942299b35bb3bd8261cb0b.tar.gz
external_webkit-90455eb70cca2df540942299b35bb3bd8261cb0b.tar.bz2
Fix case where the Texture class held a reference to a deleted Tile.
bug: 3217947 Change-Id: If75673ece459d6539f1fd990d538347e13d60d68
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp6
-rw-r--r--WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h1
-rw-r--r--WebCore/platform/graphics/android/BaseTile.cpp3
-rw-r--r--WebCore/platform/graphics/android/GLWebViewState.cpp5
4 files changed, 13 insertions, 2 deletions
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
index 1a8e686..02168a9 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.cpp
@@ -112,4 +112,10 @@ bool BackedDoubleBufferedTexture::acquire(BaseTile* owner)
return false;
}
+void BackedDoubleBufferedTexture::release(BaseTile* owner)
+{
+ if (m_owner == owner)
+ m_owner = 0;
+}
+
} // namespace WebCore
diff --git a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
index 6bbb97a..b07cdd1 100644
--- a/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
+++ b/WebCore/platform/graphics/android/BackedDoubleBufferedTexture.h
@@ -66,6 +66,7 @@ public:
// allows consumer thread to assign ownership of the texture to the tile. It
// returns false if ownership cannot be transferred because the tile is busy
bool acquire(BaseTile* owner);
+ void release(BaseTile* owner);
// private member accessor functions
BaseTile* owner() { return m_owner; } // only used by the consumer thread
diff --git a/WebCore/platform/graphics/android/BaseTile.cpp b/WebCore/platform/graphics/android/BaseTile.cpp
index 6fd9e89..4bee626 100644
--- a/WebCore/platform/graphics/android/BaseTile.cpp
+++ b/WebCore/platform/graphics/android/BaseTile.cpp
@@ -84,6 +84,9 @@ BaseTile::BaseTile()
BaseTile::~BaseTile()
{
setUsedLevel(-1);
+ if(m_texture)
+ m_texture->release(this);
+
#ifdef DEBUG_COUNT
gBaseTileCount--;
#endif
diff --git a/WebCore/platform/graphics/android/GLWebViewState.cpp b/WebCore/platform/graphics/android/GLWebViewState.cpp
index 58c7ab5..d0d054f 100644
--- a/WebCore/platform/graphics/android/GLWebViewState.cpp
+++ b/WebCore/platform/graphics/android/GLWebViewState.cpp
@@ -75,11 +75,12 @@ GLWebViewState::GLWebViewState()
, m_extra(0)
, m_navLayer(0)
{
- m_tiledPageA = new TiledPage(FIRST_TILED_PAGE_ID, this);
- m_tiledPageB = new TiledPage(SECOND_TILED_PAGE_ID, this);
m_viewport.setEmpty();
m_viewportTileBounds.setEmpty();
m_preZoomBounds.setEmpty();
+
+ m_tiledPageA = new TiledPage(FIRST_TILED_PAGE_ID, this);
+ m_tiledPageB = new TiledPage(SECOND_TILED_PAGE_ID, this);
#ifdef DEBUG_COUNT
gGLWebViewStateCount++;
#endif