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

ruby-changes:14913

From: nobu <ko1@a...>
Date: Sun, 28 Feb 2010 15:11:24 +0900 (JST)
Subject: [ruby-changes:14913] Ruby:r26783 (ruby_1_8): * lib/open3.rb (Open3#popen3): use Thread.detach instead of

nobu	2010-02-28 15:11:11 +0900 (Sun, 28 Feb 2010)

  New Revision: 26783

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

  Log:
    * lib/open3.rb (Open3#popen3): use Thread.detach instead of
      double-fork, so that the exit status can be obtained.

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/lib/open3.rb
    branches/ruby_1_8/version.h

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 26782)
+++ ruby_1_8/ChangeLog	(revision 26783)
@@ -1,3 +1,8 @@
+Sun Feb 28 15:11:07 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/open3.rb (Open3#popen3): use Thread.detach instead of
+	  double-fork, so that the exit status can be obtained.
+
 Wed Feb 24 22:39:15 2010  Tanaka Akira  <akr@f...>
 
 	* lib/resolv.rb: fix [ruby-core:28320] reported by Paul Clegg.
Index: ruby_1_8/version.h
===================================================================
--- ruby_1_8/version.h	(revision 26782)
+++ ruby_1_8/version.h	(revision 26783)
@@ -1,7 +1,7 @@
 #define RUBY_VERSION "1.8.8"
-#define RUBY_RELEASE_DATE "2010-02-24"
+#define RUBY_RELEASE_DATE "2010-02-28"
 #define RUBY_VERSION_CODE 188
-#define RUBY_RELEASE_CODE 20100224
+#define RUBY_RELEASE_CODE 20100228
 #define RUBY_PATCHLEVEL -1
 
 #define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
 #define RUBY_VERSION_TEENY 8
 #define RUBY_RELEASE_YEAR 2010
 #define RUBY_RELEASE_MONTH 2
-#define RUBY_RELEASE_DAY 24
+#define RUBY_RELEASE_DAY 28
 
 #ifdef RUBY_EXTERN
 RUBY_EXTERN const char ruby_version[];
Index: ruby_1_8/lib/open3.rb
===================================================================
--- ruby_1_8/lib/open3.rb	(revision 26782)
+++ ruby_1_8/lib/open3.rb	(revision 26783)
@@ -56,39 +56,37 @@
 
     pid = fork{
       # child
-      fork{
-	# grandchild
-	pw[1].close
-	STDIN.reopen(pw[0])
-	pw[0].close
+      pw[1].close
+      STDIN.reopen(pw[0])
+      pw[0].close
 
-	pr[0].close
-	STDOUT.reopen(pr[1])
-	pr[1].close
+      pr[0].close
+      STDOUT.reopen(pr[1])
+      pr[1].close
 
-	pe[0].close
-	STDERR.reopen(pe[1])
-	pe[1].close
+      pe[0].close
+      STDERR.reopen(pe[1])
+      pe[1].close
 
-	exec(*cmd)
-      }
-      exit!(0)
+      exec(*cmd)
     }
 
     pw[0].close
     pr[1].close
     pe[1].close
-    Process.waitpid(pid)
+    waiter = Process.detach(pid)
     pi = [pw[1], pr[0], pe[0]]
+    result = pi + [waiter]
     pw[1].sync = true
     if defined? yield
       begin
-	return yield(*pi)
+	return yield(*result)
       ensure
 	pi.each{|p| p.close unless p.closed?}
+        waiter.join
       end
     end
-    pi
+    result
   end
   module_function :popen3
 end

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

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