aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar Ben Wagner <bungeman@google.com>2017-10-03 11:08:14 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-10-03 18:34:35 +0000
commitaf89366cb816a159ec6f761ca47e5b52fc0bde7f (patch)
treee5530d72a4cdee5930c161238c4804f25c308ef4 /include
parent364e24809dea38c7ee0b54f3ff694dbb7d4e0664 (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.h5
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;