#ifndef SkRefCnt_DEFINED
#define SkRefCnt_DEFINED
+#include "SkDynamicAnnotations.h"
#include "SkThread.h"
#include "SkInstCnt.h"
#include "SkTemplates.h"
/** 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.