summaryrefslogtreecommitdiff
path: root/lib/rubygems
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-25 07:55:42 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-07-25 07:55:42 +0000
commita8187405537c7cfc747b14d45c5ee961323dec63 (patch)
tree5653c45b1a9e07ee8699564df862e06ece5c8476 /lib/rubygems
parent895c1ce477e21198158654bea4a12ef5af470cfd (diff)
remote_fetcher.rb: fix leaked FDs
* lib/rubygems/remote_fetcher.rb (request): close connections. * lib/rubygems/request.rb (close): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rubygems')
-rw-r--r--lib/rubygems/remote_fetcher.rb2
-rw-r--r--lib/rubygems/request.rb6
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb
index 58991caeda..d5af458dfe 100644
--- a/lib/rubygems/remote_fetcher.rb
+++ b/lib/rubygems/remote_fetcher.rb
@@ -337,6 +337,8 @@ class Gem::RemoteFetcher
request.fetch do |req|
yield req if block_given?
end
+ ensure
+ request.close if request
end
def https?(uri)
diff --git a/lib/rubygems/request.rb b/lib/rubygems/request.rb
index d2f076f581..cc99d30e92 100644
--- a/lib/rubygems/request.rb
+++ b/lib/rubygems/request.rb
@@ -28,6 +28,12 @@ class Gem::Request
@env_no_proxy = get_no_proxy_from_env
end
+ def close
+ @connections.each_value do |conn|
+ conn.finish
+ end
+ end
+
def add_rubygems_trusted_certs(store)
pattern = File.expand_path("./ssl_certs/*.pem", File.dirname(__FILE__))
Dir.glob(pattern).each do |ssl_cert_file|