Revert of https://codereview.chromium.org/112783004/
Reason for revert: Failing assert on Android

R=scroggo@google.com, halcanary@google.com, reed@google.com, rmistry@google.com
TBR=halcanary@google.com, reed@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true

Author: robertphillips@google.com

Review URL: https://codereview.chromium.org/93673005

git-svn-id: http://skia.googlecode.com/svn/trunk/src@12646 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/core/SkPixelRef.cpp b/core/SkPixelRef.cpp
index da88ca5..e93882a 100644
--- a/core/SkPixelRef.cpp
+++ b/core/SkPixelRef.cpp
@@ -182,10 +182,6 @@
 
         if (1 == ++fLockCount) {
             fPixels = this->onLockPixels(&fColorTable);
-            // If onLockPixels failed, it will return NULL
-            if (NULL == fPixels) {
-                fColorTable = NULL;
-            }
         }
     }
 }
@@ -198,14 +194,9 @@
 
         SkASSERT(fLockCount > 0);
         if (0 == --fLockCount) {
-            // don't call onUnlockPixels unless onLockPixels succeeded
-            if (fPixels) {
-                this->onUnlockPixels();
-                fPixels = NULL;
-                fColorTable = NULL;
-            } else {
-                SkASSERT(NULL == fColorTable);
-            }
+            this->onUnlockPixels();
+            fPixels = NULL;
+            fColorTable = NULL;
         }
     }
 }
diff --git a/core/SkScaledImageCache.cpp b/core/SkScaledImageCache.cpp
index 1b8ad52..b3956f4 100644
--- a/core/SkScaledImageCache.cpp
+++ b/core/SkScaledImageCache.cpp
@@ -209,6 +209,7 @@
     SkDiscardableMemory* fDM;
     size_t               fRB;
     bool                 fFirstTime;
+    bool                 fIsLocked;
 
     typedef SkPixelRef INHERITED;
 };
@@ -224,6 +225,7 @@
 
     SkASSERT(dm->data());
     fFirstTime = true;
+    fIsLocked = false;
 }
 
 SkOneShotDiscardablePixelRef::~SkOneShotDiscardablePixelRef() {
@@ -233,16 +235,21 @@
 void* SkOneShotDiscardablePixelRef::onLockPixels(SkColorTable** ctable) {
     if (fFirstTime) {
         // we're already locked
-        SkASSERT(fDM->data());
         fFirstTime = false;
         return fDM->data();
     }
-    return fDM->lock() ? fDM->data() : NULL;
+
+    SkASSERT(!fIsLocked);
+    fIsLocked = fDM->lock();
+    return fIsLocked ? fDM->data() : NULL;
 }
 
 void SkOneShotDiscardablePixelRef::onUnlockPixels() {
     SkASSERT(!fFirstTime);
-    fDM->unlock();
+    if (fIsLocked) {
+        fIsLocked = false;
+        fDM->unlock();
+    }
 }
 
 size_t SkOneShotDiscardablePixelRef::getAllocatedSizeInBytes() const {
diff --git a/images/SkImageRef_ashmem.cpp b/images/SkImageRef_ashmem.cpp
index 9933ca9..0dba1d1 100644
--- a/images/SkImageRef_ashmem.cpp
+++ b/images/SkImageRef_ashmem.cpp
@@ -1,10 +1,10 @@
+
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
-
 #include "SkImageRef_ashmem.h"
 #include "SkImageDecoder.h"
 #include "SkFlattenableBuffers.h"
diff --git a/lazy/SkCachingPixelRef.cpp b/lazy/SkCachingPixelRef.cpp
index b7eaf57..667a949 100644
--- a/lazy/SkCachingPixelRef.cpp
+++ b/lazy/SkCachingPixelRef.cpp
@@ -90,7 +90,9 @@
 }
 
 void SkCachingPixelRef::onUnlockPixels() {
-    SkASSERT(fScaledCacheId != NULL);
-    SkScaledImageCache::Unlock( static_cast<SkScaledImageCache::ID*>(fScaledCacheId));
-    fScaledCacheId = NULL;
+    if (fScaledCacheId != NULL) {
+        SkScaledImageCache::Unlock(
+            static_cast<SkScaledImageCache::ID*>(fScaledCacheId));
+        fScaledCacheId = NULL;
+    }
 }
diff --git a/lazy/SkDiscardablePixelRef.cpp b/lazy/SkDiscardablePixelRef.cpp
index 2528a99..6a9507c 100644
--- a/lazy/SkDiscardablePixelRef.cpp
+++ b/lazy/SkDiscardablePixelRef.cpp
@@ -58,7 +58,9 @@
     return pixels;
 }
 void SkDiscardablePixelRef::onUnlockPixels() {
-    fDiscardableMemory->unlock();
+    if (fDiscardableMemory != NULL) {
+        fDiscardableMemory->unlock();
+    }
 }
 
 bool SkInstallDiscardablePixelRef(SkImageGenerator* generator,