diff --git a/stdlib/public/runtime/ThreadLocalStorage.h b/stdlib/public/runtime/ThreadLocalStorage.h index c3a50a24fc1..c15db88092b 100644 --- a/stdlib/public/runtime/ThreadLocalStorage.h +++ b/stdlib/public/runtime/ThreadLocalStorage.h @@ -90,7 +90,7 @@ static_assert(std::is_same<__swift_thread_key_t, DWORD>::value, # define SWIFT_THREAD_KEY_CREATE _stdlib_thread_key_create # define SWIFT_THREAD_GETSPECIFIC FlsGetValue -# define SWIFT_THREAD_SETSPECIFIC(key, value) (FlsSetValue(key, value) == TRUE) +# define SWIFT_THREAD_SETSPECIFIC(key, value) (FlsSetValue(key, value) == FALSE) # else // Otherwise use the pthread API. diff --git a/stdlib/public/stubs/ThreadLocalStorage.cpp b/stdlib/public/stubs/ThreadLocalStorage.cpp index 3da65bd1374..219a13c652c 100644 --- a/stdlib/public/stubs/ThreadLocalStorage.cpp +++ b/stdlib/public/stubs/ThreadLocalStorage.cpp @@ -43,7 +43,9 @@ static inline int _stdlib_thread_key_create(__swift_thread_key_t * _Nonnull key, __swift_thread_key_destructor _Nullable destructor) { *key = FlsAlloc(destroyTLS_CCAdjustmentThunk); - return *key != FLS_OUT_OF_INDEXES; + if (*key == FLS_OUT_OF_INDEXES) + return GetLastError(); + return 0; } #endif