Home | History | Annotate | Download | only in ports
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkTLS.h"
      9 
     10 #include <pthread.h>
     11 
     12 static pthread_key_t gSkTLSKey;
     13 static pthread_once_t gSkTLSKey_Once = PTHREAD_ONCE_INIT;
     14 
     15 static void sk_tls_make_key() {
     16     (void)pthread_key_create(&gSkTLSKey, SkTLS::Destructor);
     17 }
     18 
     19 void* SkTLS::PlatformGetSpecific(bool forceCreateTheSlot) {
     20     // should we use forceCreateTheSlot to potentially skip calling pthread_once
     21     // and just return NULL if we've never been called with
     22     // forceCreateTheSlot==true ?
     23 
     24     (void)pthread_once(&gSkTLSKey_Once, sk_tls_make_key);
     25     return pthread_getspecific(gSkTLSKey);
     26 }
     27 
     28 void SkTLS::PlatformSetSpecific(void* ptr) {
     29     (void)pthread_setspecific(gSkTLSKey, ptr);
     30 }
     31