diff options
Diffstat (limited to 'lib/rubygems/core_ext/tcpsocket_init.rb')
-rw-r--r-- | lib/rubygems/core_ext/tcpsocket_init.rb | 5 |
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 |