19
19
20
20
SWIFT_CC (swift) SWIFT_RUNTIME_STDLIB_API
21
21
void _stdlib_destroyTLS(void *);
22
+
22
23
SWIFT_CC (swift) SWIFT_RUNTIME_STDLIB_API
23
24
void *_stdlib_createTLS(void );
24
25
26
+ #ifndef SWIFT_THREAD_GETSPECIFIC
27
+
28
+ # if defined(_WIN32) && !defined(__CYGWIN__)
29
+
30
+ # if defined(_M_IX86)
31
+ typedef __stdcall void (*__swift_thread_key_destructor)(void *);
32
+ # else
33
+ typedef void (*__swift_thread_key_destructor)(void *);
34
+ # endif
35
+
36
+ static void
37
+ #if defined(_M_IX86)
38
+ __stdcall
39
+ #endif
40
+ destroyTLS_CCAdjustmentThunk (void *ptr) {
41
+ _stdlib_destroyTLS (ptr);
42
+ }
43
+
44
+ static inline int
45
+ _stdlib_thread_key_create (__swift_thread_key_t * _Nonnull key,
46
+ __swift_thread_key_destructor _Nullable destructor) {
47
+ *key = FlsAlloc (destroyTLS_CCAdjustmentThunk);
48
+ return *key != FLS_OUT_OF_INDEXES;
49
+ }
50
+
51
+ # endif
52
+
53
+ #endif
54
+
25
55
#if SWIFT_TLS_HAS_RESERVED_PTHREAD_SPECIFIC
26
56
27
57
SWIFT_RUNTIME_STDLIB_INTERNAL
@@ -52,7 +82,8 @@ SWIFT_RUNTIME_STDLIB_INTERNAL
52
82
void *
53
83
_swift_stdlib_threadLocalStorageGet (void ) {
54
84
static swift::OnceToken_t token;
55
- static pthread_key_t key;
85
+ static __swift_thread_key_t key;
86
+
56
87
SWIFT_ONCE_F (token, [](void *) {
57
88
int result = SWIFT_THREAD_KEY_CREATE (&key, [](void *pointer) {
58
89
_stdlib_destroyTLS (pointer);
@@ -61,7 +92,7 @@ _swift_stdlib_threadLocalStorageGet(void) {
61
92
swift::fatalError (0 , " couldn't create pthread key for stdlib TLS: %s\n " ,
62
93
std::strerror (result));
63
94
}, nullptr );
64
-
95
+
65
96
void *value = SWIFT_THREAD_GETSPECIFIC (key);
66
97
if (!value) {
67
98
value = _stdlib_createTLS ();
0 commit comments