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

ruby-changes:9654

From: yugui <ko1@a...>
Date: Tue, 30 Dec 2008 19:33:10 +0900 (JST)
Subject: [ruby-changes:9654] Ruby:r21196 (ruby_1_9_1): merges r21181 from trunk into ruby_1_9_1.

yugui	2008-12-30 19:32:51 +0900 (Tue, 30 Dec 2008)

  New Revision: 21196

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21196

  Log:
    merges r21181 from trunk into ruby_1_9_1.
    * process.c (rb_waitpid): retries waitpid when EINTR.
      [ruby-core:19744].

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/process.c
    branches/ruby_1_9_1/test/ruby/test_process.rb

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 21195)
+++ ruby_1_9_1/ChangeLog	(revision 21196)
@@ -1,3 +1,8 @@
+Mon Dec 29 22:37:17 2008  Yuki Sonoda (Yugui)  <yugui@y...>
+
+	* process.c (rb_waitpid): retries waitpid when EINTR.
+	  [ruby-core:19744].
+
 Mon Dec 29 23:41:42 2008  Koichi Sasada  <ko1@a...>
 
 	* ext/dl/test/test_base.rb: add libc search logic.
Index: ruby_1_9_1/process.c
===================================================================
--- ruby_1_9_1/process.c	(revision 21195)
+++ ruby_1_9_1/process.c	(revision 21196)
@@ -624,18 +624,17 @@
 #ifndef NO_WAITPID
     struct waitpid_arg arg;
 
+retry:
     arg.pid = pid;
     arg.st = st;
     arg.flags = flags;
     result = (rb_pid_t)rb_thread_blocking_region(rb_waitpid_blocking, &arg,
 						 RUBY_UBF_PROCESS, 0);
     if (result < 0) {
-#if 0
 	if (errno == EINTR) {
-	    rb_thread_polling();
-	    goto retry;
-	}
-#endif
+            RUBY_VM_CHECK_INTS();
+            goto retry;
+        }
 	return -1;
     }
 #else  /* NO_WAITPID */
Index: ruby_1_9_1/test/ruby/test_process.rb
===================================================================
--- ruby_1_9_1/test/ruby/test_process.rb	(revision 21195)
+++ ruby_1_9_1/test/ruby/test_process.rb	(revision 21196)
@@ -1010,4 +1010,16 @@
   def test_pst_inspect
     assert_nothing_raised { Process::Status.allocate.inspect }
   end
+
+  def test_wait_and_sigchild
+    signal_received = []
+    Signal.trap(:CHLD)  { signal_received << true; puts "child died" }
+    pid = fork { sleep 1; exit }
+    Thread.start { raise }
+    Process.wait pid
+    sleep 2
+    assert_equal [true], signal_received, " [ruby-core:19744]"
+  ensure
+    Signal.trap(:CHLD, 'DEFAULT')
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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