diff --git a/CoreFoundation/Base.subproj/CFPlatform.c b/CoreFoundation/Base.subproj/CFPlatform.c index 343eb93d1c..f20c6be720 100644 --- a/CoreFoundation/Base.subproj/CFPlatform.c +++ b/CoreFoundation/Base.subproj/CFPlatform.c @@ -580,11 +580,16 @@ CF_PRIVATE void __CFFinalizeWindowsThreadData() { #endif static pthread_key_t __CFTSDIndexKey; +static pthread_once_t __CFTSDIndexKey_once = PTHREAD_ONCE_INIT; -CF_PRIVATE void __CFTSDInitialize() { +CF_PRIVATE void __CFTSDInitializeOnce() { (void)pthread_key_create(&__CFTSDIndexKey, __CFTSDFinalize); } +CF_PRIVATE void __CFTSDInitialize() { + (void)pthread_once(&__CFTSDIndexKey_once, __CFTSDInitializeOnce); +} + static void __CFTSDSetSpecific(void *arg) { #if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI pthread_setspecific(__CFTSDIndexKey, arg);