Skip to content

Commit a2b66a1

Browse files
committed
fix tls callback
ctypes_tls_callback was never called.
1 parent 8404044 commit a2b66a1

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

src/ctypes-foreign/foreign_threaded_stubs.c

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,35 @@ ctypes_tls_callback(void* a, DWORD reason, PVOID b)
5151
}
5252
}
5353

54-
#ifdef _MSC_VER
55-
#pragma const_seg(".CRT$XLB") EXTERN_C const PIMAGE_TLS_CALLBACK \
56-
__crt_ctypes_tls_callback__ = ctypes_tls_callback;
57-
#else
54+
#ifndef _MSC_VER
55+
5856
PIMAGE_TLS_CALLBACK __crt_ctypes_tls_callback__ __attribute__ \
5957
((section(".CRT$XLB"))) = ctypes_tls_callback;
60-
#endif
58+
59+
#else
60+
61+
#ifdef _WIN64
62+
63+
#pragma comment(linker, "/INCLUDE:_tls_used")
64+
#pragma comment(linker, "/INCLUDE:crt_ctypes_tls_callback")
65+
#pragma data_seg(push, old_seg)
66+
#pragma const_seg(".CRT$XLB")
67+
extern const PIMAGE_TLS_CALLBACK crt_ctypes_tls_callback;
68+
const PIMAGE_TLS_CALLBACK crt_ctypes_tls_callback = ctypes_tls_callback;
69+
#pragma data_seg(pop, old_seg)
70+
71+
#else
72+
73+
#pragma comment(linker, "/INCLUDE:__tls_used")
74+
#pragma comment(linker, "/INCLUDE:_crt_ctypes_tls_callback")
75+
#pragma data_seg(push, old_seg)
76+
#pragma data_seg(".CRT$XLB")
77+
PIMAGE_TLS_CALLBACK crt_ctypes_tls_callback = ctypes_tls_callback;
78+
#pragma data_seg(pop, old_seg)
79+
80+
#endif /* _WIN64 */
81+
82+
#endif /* _MSC_VER */
6183

6284
static int ctypes_thread_actually_register(void)
6385
{

0 commit comments

Comments
 (0)