From 8e5d2c9535a320fa5b1fd51f0c414e3b1899b318 Mon Sep 17 00:00:00 2001 From: Alex Blewitt Date: Fri, 17 Nov 2017 20:31:50 +0000 Subject: [PATCH] [SR-6420] Ensure that the pthread_key is initialised once --- CoreFoundation/Base.subproj/CFPlatform.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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);