1
/**********************************************************************
6
$Date: 2007-08-25 12:29:39 +0900 (土, 25 8月 2007) $
7
created at: Wed Aug 16 01:15:38 JST 1995
9
Copyright (C) 1993-2007 Yukihiro Matsumoto
11
**********************************************************************/
16
#if defined(__cplusplus)
19
} /* satisfy cc-mode */
26
typedef LONG rb_atomic_t;
28
# define ATOMIC_TEST(var) InterlockedExchange(&(var), 0)
29
# define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val))
30
# define ATOMIC_INC(var) InterlockedIncrement(&(var))
31
# define ATOMIC_DEC(var) InterlockedDecrement(&(var))
33
/* Windows doesn't allow interrupt while system calls */
34
# define TRAP_BEG do {\
35
rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 1)
38
ATOMIC_SET(rb_trap_immediate, trap_immediate);\
41
# define RUBY_CRITICAL(statements) do {\
42
rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 0);\
44
ATOMIC_SET(rb_trap_immediate, trap_immediate);\
47
typedef int rb_atomic_t;
49
# define ATOMIC_TEST(var) ((var) ? ((var) = 0, 1) : 0)
50
# define ATOMIC_SET(var, val) ((var) = (val))
51
# define ATOMIC_INC(var) (++(var))
52
# define ATOMIC_DEC(var) (--(var))
54
# define TRAP_BEG do {\
55
int trap_immediate = rb_trap_immediate;\
59
rb_trap_immediate = trap_immediate;\
62
# define RUBY_CRITICAL(statements) do {\
63
int trap_immediate = rb_trap_immediate;\
64
rb_trap_immediate = 0;\
66
rb_trap_immediate = trap_immediate;\
69
RUBY_EXTERN rb_atomic_t rb_trap_immediate;
71
RUBY_EXTERN int rb_prohibit_interrupt;
72
#define DEFER_INTS (rb_prohibit_interrupt++)
73
#define ALLOW_INTS do {\
74
rb_prohibit_interrupt--;\
76
#define ENABLE_INTS (rb_prohibit_interrupt--)
78
VALUE rb_with_disable_interrupt(VALUE(*)(ANYARGS),VALUE);
80
RUBY_EXTERN rb_atomic_t rb_trap_pending;
81
void rb_trap_restore_mask(void);
83
RUBY_EXTERN int rb_thread_critical;
84
void rb_thread_schedule(void);
86
#if defined(__cplusplus)
88
{ /* satisfy cc-mode */
93
#endif /* RUBYSIG_H */