Index: src/core/SkPixelRef.cpp |
diff --git a/src/core/SkPixelRef.cpp b/src/core/SkPixelRef.cpp |
index b5daf0b57a90ca0321babf11c37da2eef05fab93..740d269a27a339065b4a91c9f8fa8fbb4d80ca94 100644 |
--- a/src/core/SkPixelRef.cpp |
+++ b/src/core/SkPixelRef.cpp |
@@ -178,6 +178,10 @@ void SkPixelRef::lockPixels() { |
if (1 == ++fLockCount) { |
fPixels = this->onLockPixels(&fColorTable); |
+ // If onLockPixels failed, it will return NULL |
+ if (NULL == fPixels) { |
+ fColorTable = NULL; |
+ } |
} |
} |
} |
@@ -190,9 +194,14 @@ void SkPixelRef::unlockPixels() { |
SkASSERT(fLockCount > 0); |
if (0 == --fLockCount) { |
- this->onUnlockPixels(); |
- fPixels = NULL; |
- fColorTable = NULL; |
+ // don't call onUnlockPixels unless onLockPixels succeeded |
+ if (fPixels) { |
+ this->onUnlockPixels(); |
+ fPixels = NULL; |
+ fColorTable = NULL; |
+ } else { |
+ SkASSERT(NULL == fColorTable); |
+ } |
} |
} |
} |