summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-19 14:00:31 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-19 14:00:31 +0000
commit11d2b16cfb857fb0d473642730f7ab2275e85ebb (patch)
treeaabc26b701ba8d01fd56f5df498f5eb1c41d26a8 /lib
parent4528d7e0cfa9e1434b7de588fed19580567006b6 (diff)
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
Diffstat (limited to 'lib')
-rw-r--r--lib/rubygems/util.rb11
1 files changed, 6 insertions, 5 deletions
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