Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Commit 689e4ce

Browse files
authored
Merge pull request #270 from nateprewitt/265_remove_stream_on_close
removing stream from recent_recv_streams on clean close
2 parents e7c4cb5 + 90b43a3 commit 689e4ce

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

hyper/http20/connection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,7 @@ def _stream_close_cb(self, stream_id):
817817
"""
818818
try:
819819
del self.streams[stream_id]
820+
self.recent_recv_streams.discard(stream_id)
820821
except KeyError:
821822
pass
822823

test/test_hyper.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,30 @@ def test_closed_connections_are_reset(self):
259259
assert c.next_stream_id == 1
260260
assert c.window_manager is not wm
261261

262+
def test_streams_removed_on_close(self):
263+
# Create content for read from socket
264+
e = Encoder()
265+
h1 = HeadersFrame(1)
266+
h1.data = e.encode([(':status', 200), ('content-type', 'foo/bar')])
267+
h1.flags |= set(['END_HEADERS', 'END_STREAM'])
268+
sock = DummySocket()
269+
sock.buffer = BytesIO(h1.serialize())
270+
271+
c = HTTP20Connection('www.google.com')
272+
c._sock = sock
273+
stream_id = c.request('GET', '/')
274+
275+
# Create reference to current recent_recv_streams set
276+
recent_recv_streams = c.recent_recv_streams
277+
streams = c.streams
278+
279+
resp = c.get_response(stream_id=stream_id)
280+
assert stream_id in recent_recv_streams
281+
assert stream_id in streams
282+
resp.read()
283+
assert stream_id not in recent_recv_streams
284+
assert stream_id not in streams
285+
262286
def test_connection_no_window_update_on_zero_length_data_frame(self):
263287
# Prepare a socket with a data frame in it that has no length.
264288
sock = DummySocket()

0 commit comments

Comments
 (0)