Skip to content

Commit a4d93fd

Browse files
authored
Merge pull request #152 from fatkodima/close-discarded-connections
Close discarded connections
2 parents 2cd8bec + 51feefe commit a4d93fd

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lib/net/http/persistent/timed_stack_multi.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ def try_create options = {} # :nodoc:
6363
if @created >= @max && @enqueued >= 1
6464
oldest, = @lru.first
6565
@lru.delete oldest
66-
@ques[oldest].pop
66+
connection = @ques[oldest].pop
67+
connection.close if connection.respond_to?(:close)
6768

6869
@created -= 1
6970
end

test/test_net_http_persistent_timed_stack_multi.rb

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
class TestNetHttpPersistentTimedStackMulti < Minitest::Test
55

66
class Connection
7-
attr_reader :host
7+
attr_reader :host, :closed
88

99
def initialize(host)
1010
@host = host
11+
@closed = false
12+
end
13+
14+
def close
15+
@closed = true
1116
end
1217
end
1318

@@ -69,6 +74,18 @@ def test_pop_full
6974
assert_empty stack
7075
end
7176

77+
def test_pop_closes_extra_connections
78+
stack = Net::HTTP::Persistent::TimedStackMulti.new(1) { |host| Connection.new(host) }
79+
80+
a_conn = stack.pop connection_args: 'a.example'
81+
stack.push a_conn, connection_args: 'a.example'
82+
83+
b_conn = stack.pop connection_args: 'b.example'
84+
85+
assert a_conn.closed
86+
refute b_conn.closed
87+
end
88+
7289
def test_pop_wait
7390
thread = Thread.start do
7491
@stack.pop

0 commit comments

Comments
 (0)