Ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e0ba6b95ab71a441357ed5484e33498)
thread_win32.h
1#ifndef RUBY_THREAD_WIN32_H
2#define RUBY_THREAD_WIN32_H
3/**********************************************************************
4
5 thread_win32.h -
6
7 $Author$
8
9 Copyright (C) 2004-2007 Koichi Sasada
10
11**********************************************************************/
12
13/* interface */
14
15# ifdef __CYGWIN__
16# undef _WIN32
17# endif
18
19#define USE_VM_CLOCK 1
20
21WINBASEAPI BOOL WINAPI
22TryEnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
23
25 struct cond_event_entry *next;
26 struct cond_event_entry *prev;
27};
28
29typedef struct native_thread_data_struct {
30 HANDLE interrupt_event;
32
33typedef struct rb_global_vm_lock_struct {
34 HANDLE lock;
36
37typedef DWORD native_tls_key_t; // TLS index
38
39static inline void *
40native_tls_get(native_tls_key_t key)
41{
42 void *ptr = TlsGetValue(key);
43 if (UNLIKELY(ptr == NULL)) {
44 rb_bug("TlsGetValue() returns NULL");
45 }
46 return ptr;
47}
48
49static inline void
50native_tls_set(native_tls_key_t key, void *ptr)
51{
52 if (UNLIKELY(TlsSetValue(key, ptr) == 0)) {
53 rb_bug("TlsSetValue() error");
54 }
55}
56
57RUBY_SYMBOL_EXPORT_BEGIN
58RUBY_EXTERN native_tls_key_t ruby_current_ec_key;
59RUBY_SYMBOL_EXPORT_END
60
61#endif /* RUBY_THREAD_WIN32_H */
#define RUBY_EXTERN
Declaration of externally visible global variables.
Definition: dllexport.h:47
void rb_bug(const char *fmt,...)
Interpreter panic switch.
Definition: error.c:802