OSDN Git Service

Workaround possible use after delete
authorChris Craik <ccraik@google.com>
Mon, 10 Jun 2013 18:28:51 +0000 (11:28 -0700)
committerThe Android Automerger <android-build@android.com>
Mon, 10 Jun 2013 22:18:19 +0000 (15:18 -0700)
bug:9321162
Change-Id: Ic35af5b5925da56e9a143e6b33658831038f3b72

libs/hwui/DisplayList.cpp

index 648da9c..1cbd531 100644 (file)
@@ -63,6 +63,7 @@ void DisplayList::destroyDisplayListDeferred(DisplayList* displayList) {
 
 void DisplayList::clearResources() {
     mDisplayListData = NULL;
+    mSize = 0; // TODO: shouldn't be needed, WAR possible use after delete
 
     mClipRectOp = NULL;
     mSaveLayerOp = NULL;
@@ -479,7 +480,7 @@ void DisplayList::replay(ReplayStateStruct& replayStruct, const int level) {
  */
 template <class T>
 void DisplayList::iterate(OpenGLRenderer& renderer, T& handler, const int level) {
-    if (mSize == 0 || mAlpha <= 0) {
+    if (mSize == 0 || mAlpha <= 0 || CC_UNLIKELY(!mSaveOp)) { // TODO: shouldn't need mSaveOp check
         DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, mName.string());
         return;
     }