diff options
Diffstat (limited to 'include/core/SkRefCnt.h')
-rw-r--r-- | include/core/SkRefCnt.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h index 28591920a6..e4524beff7 100644 --- a/include/core/SkRefCnt.h +++ b/include/core/SkRefCnt.h @@ -10,6 +10,7 @@ #ifndef SkRefCnt_DEFINED #define SkRefCnt_DEFINED +#include "SkDynamicAnnotations.h" #include "SkThread.h" #include "SkInstCnt.h" #include "SkTemplates.h" @@ -44,11 +45,13 @@ public: /** Return the reference count. Use only for debugging. */ int32_t getRefCnt() const { return fRefCnt; } - /** Returns true if the caller is the only owner. + /** May return true if the caller is the only owner. * Ensures that all previous owner's actions are complete. */ bool unique() const { - bool const unique = (1 == fRefCnt); + // We believe we're reading fRefCnt in a safe way here, so we stifle the TSAN warning about + // an unproctected read. Generally, don't read fRefCnt, and don't stifle this warning. + bool const unique = (1 == SK_ANNOTATE_UNPROTECTED_READ(fRefCnt)); if (unique) { // Acquire barrier (L/SL), if not provided by load of fRefCnt. // Prevents user's 'unique' code from happening before decrements. |