Ruby  3.4.0dev (2024-11-05 revision e440268d51fe02b303e3817a7a733a0dac1c5091)
thread_win32.h (e440268d51fe02b303e3817a7a733a0dac1c5091)
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 
21 WINBASEAPI BOOL WINAPI
22 TryEnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
23 
24 struct rb_native_thread {
25  HANDLE thread_id;
26  HANDLE interrupt_event;
27 };
28 
29 struct rb_thread_sched_item {
30  void *vm_stack;
31 };
32 
33 struct rb_thread_sched {
34  HANDLE lock;
35 };
36 
37 typedef DWORD native_tls_key_t; // TLS index
38 
39 static inline void *
40 native_tls_get(native_tls_key_t key)
41 {
42  // return value should be checked by caller.
43  return TlsGetValue(key);
44 }
45 
46 static inline void
47 native_tls_set(native_tls_key_t key, void *ptr)
48 {
49  if (UNLIKELY(TlsSetValue(key, ptr) == 0)) {
50  rb_bug("TlsSetValue() error");
51  }
52 }
53 
54 RUBY_SYMBOL_EXPORT_BEGIN
55 RUBY_EXTERN native_tls_key_t ruby_current_ec_key;
56 RUBY_SYMBOL_EXPORT_END
57 
58 #endif /* RUBY_THREAD_WIN32_H */
#define RUBY_EXTERN
Declaration of externally visible global variables.
Definition: dllexport.h:45
void rb_bug(const char *fmt,...)
Interpreter panic switch.
Definition: error.c:1088
char * ptr
Pointer to the underlying memory region, of at least capa bytes.
Definition: io.h:2