From 11d2b16cfb857fb0d473642730f7ab2275e85ebb Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 19 Nov 2013 14:00:31 +0000 Subject: rubygems/util.rb: fix Gem::Util.popen * lib/rubygems/util.rb (Gem::Util.popen): should close open pipe to reap the child process, in 1.9 or later. fix deadlock on waiting the child process whose output is bigger than pipe buffer, in 1.8. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43724 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rubygems/util.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'lib/rubygems') diff --git a/lib/rubygems/util.rb b/lib/rubygems/util.rb index e862458d21..af53e599b5 100644 --- a/lib/rubygems/util.rb +++ b/lib/rubygems/util.rb @@ -41,7 +41,7 @@ module Gem::Util def self.popen *command begin - r, = IO.popen command + r, = IO.popen command, &:read rescue TypeError # ruby 1.8 only supports string command r, w = IO.pipe @@ -54,12 +54,13 @@ module Gem::Util w.close - Process.wait pid - - r + begin + return r.read + ensure + Process.wait pid + end end - r.read end end -- cgit v1.2.3