aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ports/SkTLS_pthread.cpp
diff options
context:
space:
mode:
authorGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-16 14:59:24 +0000
committerGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-16 14:59:24 +0000
commitf2e7dbb09fabc31fe5b16f6dc1a16593f518ca7d (patch)
tree5e0cc6a0bf8e2b89d57c99ef54f34e26395df548 /src/ports/SkTLS_pthread.cpp
parent883fe7f8b13be4ae3e3f8d8f8a6d6e94d13f9392 (diff)
Split TLS implementation into its own translation unit.
SkTLS has it's own header separate from SkThread, and having SkThread own the platform implementation of SkTLS is problematic with Chromium. The simplest way to clean this up is to put the implementation in its own set of files, where it is also more easily found. R=robertphillips@google.com Review URL: https://codereview.chromium.org/19240007 git-svn-id: http://skia.googlecode.com/svn/trunk@10105 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/ports/SkTLS_pthread.cpp')
-rw-r--r--src/ports/SkTLS_pthread.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ports/SkTLS_pthread.cpp b/src/ports/SkTLS_pthread.cpp
new file mode 100644
index 0000000000..4264890217
--- /dev/null
+++ b/src/ports/SkTLS_pthread.cpp
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkTLS.h"
+
+#include <pthread.h>
+
+static pthread_key_t gSkTLSKey;
+static pthread_once_t gSkTLSKey_Once = PTHREAD_ONCE_INIT;
+
+static void sk_tls_make_key() {
+ (void)pthread_key_create(&gSkTLSKey, SkTLS::Destructor);
+}
+
+void* SkTLS::PlatformGetSpecific(bool forceCreateTheSlot) {
+ // should we use forceCreateTheSlot to potentially skip calling pthread_once
+ // and just return NULL if we've never been called with
+ // forceCreateTheSlot==true ?
+
+ (void)pthread_once(&gSkTLSKey_Once, sk_tls_make_key);
+ return pthread_getspecific(gSkTLSKey);
+}
+
+void SkTLS::PlatformSetSpecific(void* ptr) {
+ (void)pthread_setspecific(gSkTLSKey, ptr);
+}