Index: include/core/SkRefCnt.h |
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h |
index 1e31d918cc973727fcdf6b99b5d27a823bba478c..d85c20ecaf0638c233f38810ceb5581001208b77 100644 |
--- a/include/core/SkRefCnt.h |
+++ b/include/core/SkRefCnt.h |
@@ -261,10 +261,23 @@ public: |
bool unique() const { return 1 == sk_acquire_load(&fRefCnt); } |
void ref() const { sk_atomic_inc(&fRefCnt); } |
- void unref() const { if (1 == sk_atomic_dec(&fRefCnt)) { SkDELETE((const Derived*)this); } } |
+ void unref() const { |
+ int32_t prevValue = sk_atomic_dec(&fRefCnt); |
+ SkASSERT(prevValue >= 1); |
+ if (1 == prevValue) { |
+ SkDELETE((const Derived*)this); |
+ } |
+ } |
void deref() const { this->unref(); } // Chrome prefers to call deref(). |
int32_t getRefCnt() const { return fRefCnt; } // Used by Chrome unit tests. |
+protected: |
+#ifdef SK_DEBUG |
+ ~SkNVRefCnt() { |
+ SkASSERTF(0 == fRefCnt, "NVRefCnt was %d", fRefCnt); |
+ } |
+#endif |
+ |
private: |
mutable int32_t fRefCnt; |
}; |