aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/StringTest.cpp
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 /tests/StringTest.cpp
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 'tests/StringTest.cpp')
-rw-r--r--tests/StringTest.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/StringTest.cpp b/tests/StringTest.cpp
index 8ae7412187..91ef009edd 100644
--- a/tests/StringTest.cpp
+++ b/tests/StringTest.cpp
@@ -8,6 +8,7 @@
#include <stdarg.h>
#include <stdio.h>
#include "SkString.h"
+#include "SkThreadUtils.h"
#include "Test.h"
// Windows vsnprintf doesn't 0-terminate safely), but is so far
@@ -287,3 +288,26 @@ DEF_TEST(String_SkStrSplit_All, r) {
REPORTER_ASSERT(r, results[2].equals("b"));
REPORTER_ASSERT(r, results[3].equals(""));
}
+
+// https://bugs.chromium.org/p/skia/issues/detail?id=7107
+DEF_TEST(String_Threaded, r) {
+ SkString gString("foo");
+ SkThread::entryPointProc readString = [](void* context) -> void {
+ SkString gStringCopy = *reinterpret_cast<SkString*>(context);
+ bool equals_string = gStringCopy.equals("test");
+ (void)equals_string;
+ };
+ SkThread threads[] = {
+ {readString, &gString},
+ {readString, &gString},
+ {readString, &gString},
+ {readString, &gString},
+ {readString, &gString},
+ };
+ for (SkThread& thread : threads) {
+ thread.start();
+ }
+ for (SkThread& thread : threads) {
+ thread.join();
+ }
+}