diff options
author | Ben Wagner <bungeman@google.com> | 2017-10-03 11:08:14 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-10-03 18:34:35 +0000 |
commit | af89366cb816a159ec6f761ca47e5b52fc0bde7f (patch) | |
tree | e5530d72a4cdee5930c161238c4804f25c308ef4 /include | |
parent | 364e24809dea38c7ee0b54f3ff694dbb7d4e0664 (diff) |
Make SkString reference counting thread/TSAN safe.
BUG=skia:7107
Change-Id: I8ead98f7694faaed8e6f6f29b1fcd88501d36b66
Reviewed-on: https://skia-review.googlesource.com/54400
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/core/SkString.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/core/SkString.h b/include/core/SkString.h index 621c661142..d9a922c0c3 100644 --- a/include/core/SkString.h +++ b/include/core/SkString.h @@ -13,6 +13,7 @@ #include "../private/SkTArray.h" #include "SkScalar.h" +#include <atomic> #include <stdarg.h> /* Some helper functions for C strings @@ -240,11 +241,13 @@ private: struct Rec { public: uint32_t fLength; // logically size_t, but we want it to stay 32bits - int32_t fRefCnt; + std::atomic<int32_t> fRefCnt; char fBeginningOfData; char* data() { return &fBeginningOfData; } const char* data() const { return &fBeginningOfData; } + + bool unique() { return fRefCnt.load(std::memory_order_acquire) == 1; } }; Rec* fRec; |