diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-23 05:23:02 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-23 05:23:02 +0000 |
commit | ae2370fb50bb66cbece2cf2f338b1569b631353f (patch) | |
tree | 2558a42414a1135a2612857ece1da4068b555ef2 | |
parent | 38c8efbe2d24fdf5762beeda1075331dc5a5253e (diff) |
* signal.c (sighandler): need to tell to be interrupted to main
context when handler is installed.
* win32/win32.[ch] (rb_win32_interrupted): new function to listen
interrupt.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | signal.c | 3 | ||||
-rw-r--r-- | win32/win32.c | 8 | ||||
-rw-r--r-- | win32/win32.h | 1 |
4 files changed, 19 insertions, 1 deletions
@@ -1,3 +1,11 @@ +Fri Feb 23 14:19:40 2007 NAKAMURA Usaku <usa@ruby-lang.org> + + * signal.c (sighandler): need to tell to be interrupted to main + context when handler is installed. + + * win32/win32.[ch] (rb_win32_interrupted): new function to listen + interrupt. + Fri Feb 23 13:02:17 2007 Akinori MUSHA <knu@iDaemons.org> * numeric.c (fix_cmp, fix_equal): Remove FIX2LONG() to optimize. @@ -493,6 +493,9 @@ sighandler(sig) else { ATOMIC_INC(rb_trap_pending); ATOMIC_INC(trap_pending_list[sig]); +#ifdef _WIN32 + rb_w32_interrupted(); +#endif } } diff --git a/win32/win32.c b/win32/win32.c index 30957cd211..19ee473281 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -3323,6 +3323,12 @@ setup_call(CONTEXT* ctx, struct handler_arg_t *harg) #endif } +void +rb_w32_interrupted(void) +{ + SetSignal(interrupted_event); +} + int rb_w32_main_context(int arg, void (*handler)(int)) { @@ -3334,7 +3340,7 @@ rb_w32_main_context(int arg, void (*handler)(int)) if (GetCurrentThreadId() == main_thread.id) return FALSE; - SetSignal(interrupted_event); + rb_w32_interrupted(); RUBY_CRITICAL({ /* the main thread must be in user state */ CONTEXT ctx; diff --git a/win32/win32.h b/win32/win32.h index 48646da7a3..e74dbc7653 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -531,6 +531,7 @@ int rb_w32_times(struct tms *); /* thread stuff */ HANDLE GetCurrentThreadHandle(void); +void rb_w32_interrupted(void); int rb_w32_main_context(int arg, void (*handler)(int)); int rb_w32_sleep(unsigned long msec); void rb_w32_enter_critical(void); |