From 2b592580bf65040373b55ff2ccc3b59a0a231a18 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 10 Jun 2007 03:06:15 +0000 Subject: * include/ruby: moved public headers. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- include/ruby/signal.h | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 include/ruby/signal.h (limited to 'include/ruby/signal.h') diff --git a/include/ruby/signal.h b/include/ruby/signal.h new file mode 100644 index 0000000000..29ffcd9f11 --- /dev/null +++ b/include/ruby/signal.h @@ -0,0 +1,93 @@ +/********************************************************************** + + rubysig.h - + + $Author$ + $Date$ + created at: Wed Aug 16 01:15:38 JST 1995 + + Copyright (C) 1993-2003 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBYSIG_H +#define RUBYSIG_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include + +#ifdef _WIN32 +typedef LONG rb_atomic_t; + +# define ATOMIC_TEST(var) InterlockedExchange(&(var), 0) +# define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val)) +# define ATOMIC_INC(var) InterlockedIncrement(&(var)) +# define ATOMIC_DEC(var) InterlockedDecrement(&(var)) + +/* Windows doesn't allow interrupt while system calls */ +# define TRAP_BEG do {\ + rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 1) + +# define TRAP_END\ + ATOMIC_SET(rb_trap_immediate, trap_immediate);\ +} while (0) + +# define RUBY_CRITICAL(statements) do {\ + rb_atomic_t trap_immediate = ATOMIC_SET(rb_trap_immediate, 0);\ + statements;\ + ATOMIC_SET(rb_trap_immediate, trap_immediate);\ +} while (0) +#else +typedef int rb_atomic_t; + +# define ATOMIC_TEST(var) ((var) ? ((var) = 0, 1) : 0) +# define ATOMIC_SET(var, val) ((var) = (val)) +# define ATOMIC_INC(var) (++(var)) +# define ATOMIC_DEC(var) (--(var)) + +# define TRAP_BEG do {\ + int trap_immediate = rb_trap_immediate;\ + rb_trap_immediate = 1 + +# define TRAP_END \ + rb_trap_immediate = trap_immediate;\ +} while (0) + +# define RUBY_CRITICAL(statements) do {\ + int trap_immediate = rb_trap_immediate;\ + rb_trap_immediate = 0;\ + statements;\ + rb_trap_immediate = trap_immediate;\ +} while (0) +#endif +RUBY_EXTERN rb_atomic_t rb_trap_immediate; + +RUBY_EXTERN int rb_prohibit_interrupt; +#define DEFER_INTS (rb_prohibit_interrupt++) +#define ALLOW_INTS do {\ + rb_prohibit_interrupt--;\ +} while (0) +#define ENABLE_INTS (rb_prohibit_interrupt--) + +VALUE rb_with_disable_interrupt(VALUE(*)(ANYARGS),VALUE); + +RUBY_EXTERN rb_atomic_t rb_trap_pending; +void rb_trap_restore_mask(void); + +RUBY_EXTERN int rb_thread_critical; +void rb_thread_schedule(void); + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBYSIG_H */ -- cgit v1.2.3