[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]