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/