]> git.saurik.com Git - apple/libc.git/blobdiff - locale/xlocale_private.h
Libc-1272.200.26.tar.gz
[apple/libc.git] / locale / xlocale_private.h
index ba9feb2e51d4a4074e66de0029a52e66823c0e15..94f8ecc526931317dfe73e0b8567823247c40332 100644 (file)
@@ -32,6 +32,7 @@
 #include <locale.h>
 #include <libkern/OSAtomic.h>
 #include <pthread.h>
+#include <pthread/tsd_private.h>
 #include <limits.h>
 #include <os/lock.h>
 #include "setlocale.h"
@@ -211,9 +212,13 @@ __current_locale(void)
                return &__global_locale;
        }
 #endif
-
-       locale_t __locale = (locale_t)pthread_getspecific(__locale_key);
-       return (__locale ? __locale : &__global_locale);
+       void *__thread_locale;
+       if (_pthread_has_direct_tsd()) {
+               __thread_locale = _pthread_getspecific_direct(__locale_key);
+       } else {
+               __thread_locale = pthread_getspecific(__locale_key);
+       }
+       return (__thread_locale ? (locale_t)__thread_locale : &__global_locale);
 }
 
 static inline __attribute__((always_inline)) locale_t