summaryrefslogtreecommitdiff
path: root/lib/rubygems/core_ext/tcpsocket_init.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/core_ext/tcpsocket_init.rb')
-rw-r--r--lib/rubygems/core_ext/tcpsocket_init.rb5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/rubygems/core_ext/tcpsocket_init.rb b/lib/rubygems/core_ext/tcpsocket_init.rb
index 3275c58112..3d9740c579 100644
--- a/lib/rubygems/core_ext/tcpsocket_init.rb
+++ b/lib/rubygems/core_ext/tcpsocket_init.rb
@@ -13,12 +13,13 @@ module CoreExtensions
def initialize(host, serv, *rest)
mutex = Mutex.new
addrs = []
+ threads = []
cond_var = ConditionVariable.new
Addrinfo.foreach(host, serv, nil, :STREAM) do |addr|
Thread.report_on_exception = false if defined? Thread.report_on_exception = ()
- Thread.new(addr) do
+ threads << Thread.new(addr) do
# give head start to ipv6 addresses
sleep IPV4_DELAY_SECONDS if addr.ipv4?
@@ -40,6 +41,8 @@ module CoreExtensions
host = addrs.shift unless addrs.empty?
end
+ threads.each {|t| t.kill.join if t.alive? }
+
super(host, serv, *rest)
end
end