ruby-changes:9724
From: naruse <ko1@a...>
Date: Fri, 2 Jan 2009 06:50:29 +0900 (JST)
Subject: [ruby-changes:9724] Ruby:r21265 (trunk): * signal.c (rb_signal_buff_size): defined for check whether signal
naruse 2009-01-02 06:50:01 +0900 (Fri, 02 Jan 2009) New Revision: 21265 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21265 Log: * signal.c (rb_signal_buff_size): defined for check whether signal is in the buffer or not. * thread_pthread.c (thread_timer): don't exit the loop when signal is in the buffer. [ruby-dev:37637] Modified files: trunk/ChangeLog trunk/signal.c trunk/thread_pthread.c Index: ChangeLog =================================================================== --- ChangeLog (revision 21264) +++ ChangeLog (revision 21265) @@ -1,3 +1,11 @@ +Fri Jan 2 06:43:58 2009 NARUSE, Yui <naruse@r...> + + * signal.c (rb_signal_buff_size): defined for check whether signal + is in the buffer or not. + + * thread_pthread.c (thread_timer): don't exit the loop when signal + is in the buffer. [ruby-dev:37637] + Fri Jan 2 04:40:00 2009 Tanaka Akira <akr@f...> * ext/socket/mkconstants.rb: check duplicates. Index: thread_pthread.c =================================================================== --- thread_pthread.c (revision 21264) +++ thread_pthread.c (revision 21265) @@ -741,19 +741,24 @@ return ts; } +int rb_signal_buff_size(void); + static void * thread_timer(void *dummy) { struct timespec ts; - int err; native_mutex_lock(&timer_thread_lock); native_cond_broadcast(&timer_thread_cond); #define WAIT_FOR_10MS() native_cond_timedwait(&timer_thread_cond, &timer_thread_lock, get_ts(&ts, PER_NANO/100)) - while (system_working > 0 && (err = WAIT_FOR_10MS()) != 0 && err != EINTR) { - if (err != ETIMEDOUT) { - rb_bug("thread_timer/timedwait: %d", err); + while (system_working > 0) { + int err = WAIT_FOR_10MS(); + if (err == ETIMEDOUT); + else if (err == 0 || err == EINTR) { + if (rb_signal_buff_size() == 0) break; } + else rb_bug("thread_timer/timedwait: %d", err); + #ifndef __CYGWIN__ if (signal_thread_list_anchor.next) { FGLOCK(&signal_thread_list_lock, { Index: signal.c =================================================================== --- signal.c (revision 21264) +++ signal.c (revision 21265) @@ -514,6 +514,12 @@ #endif } +int +rb_signal_buff_size() +{ + return signal_buff.size; +} + #if USE_TRAP_MASK # ifdef HAVE_SIGPROCMASK static sigset_t trap_last_mask; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/