do not use the select_one variant for ruby 2.1, as there is a deadlock on ssl connect that is triggered in a test

This commit is contained in:
HoneyryderChuck 2020-04-13 00:40:02 +01:00
parent ed23525daf
commit 4997548d95
4 changed files with 34 additions and 13 deletions

View File

@ -69,6 +69,9 @@ Style/TrailingCommaInArguments:
Style/TrailingUnderscoreVariable:
Enabled: false
Style/AccessModifierDeclarations:
Enabled: false
Performance/TimesMap:
Enabled: false

View File

@ -40,7 +40,11 @@ end
gem "hanna-nouveau", require: false
gem "faraday", :require => false
gem "pry", :require => false
if RUBY_VERSION < "2.2"
gem "pry", "~> 0.12.2", :require => false
else
gem "pry", :require => false
end
gem "minitest", require: false
gem "minitest-proveit", require: false

View File

@ -61,12 +61,13 @@ class HTTPX::Selector
monitor
end
# waits for read/write events for +interval+. Yields for monitors of
# selected IO objects.
# Closes the selector.
#
def select(interval, &block)
return select_one(interval, &block) if @selectables.size == 1
def close; end
private
def select_many(interval)
begin
r = nil
w = nil
@ -102,12 +103,6 @@ class HTTPX::Selector
end if writers
end
# Closes the selector.
#
def close; end
private
def select_one(interval)
io, monitor = @selectables.first
@ -128,4 +123,23 @@ class HTTPX::Selector
rescue IOError, SystemCallError
@selectables.reject! { |ios, _| ios.closed? }
end
# waits for read/write events for +interval+. Yields for monitors of
# selected IO objects.
#
if RUBY_VERSION < "2.2" || RUBY_ENGINE == "jruby"
alias_method :select, :select_many
else
def select(interval, &block)
return select_one(interval, &block) if @selectables.size == 1
select_many(interval, &block)
end
end
public :select
end

View File

@ -135,8 +135,8 @@ module ResolverHelpers
def self.extended(obj)
obj.singleton_class.class_eval do
attr_reader :queries
public :parse # rubocop:disable Style/AccessModifierDeclarations
public :resolve # rubocop:disable Style/AccessModifierDeclarations
public :parse
public :resolve
end
end
end