summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAndrew Svetlov <andrew.svetlov@gmail.com>2019-12-07 11:22:00 (GMT)
committerGitHub <noreply@github.com>2019-12-07 11:22:00 (GMT)
commit7ddcd0caa4c2e6b43265df144f59c5aa508a94f2 (patch)
tree2f9a44dcf250d2097551a5fce2d34cacdc74d5a2 /Lib
parentdec367261e7e2bb4dd42feeb58031abed2ade683 (diff)
downloadcpython-7ddcd0caa4c2e6b43265df144f59c5aa508a94f2.zip
cpython-7ddcd0caa4c2e6b43265df144f59c5aa508a94f2.tar.gz
cpython-7ddcd0caa4c2e6b43265df144f59c5aa508a94f2.tar.bz2
bpo-38529: Fix asyncio stream warning (GH-17474)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/streams.py19
-rw-r--r--Lib/test/test_asyncio/test_streams.py53
2 files changed, 1 insertions, 71 deletions
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
index 795530e..3c80bb8 100644
--- a/Lib/asyncio/streams.py
+++ b/Lib/asyncio/streams.py
@@ -214,8 +214,7 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol):
def __init__(self, stream_reader, client_connected_cb=None, loop=None):
super().__init__(loop=loop)
if stream_reader is not None:
- self._stream_reader_wr = weakref.ref(stream_reader,
- self._on_reader_gc)
+ self._stream_reader_wr = weakref.ref(stream_reader)
self._source_traceback = stream_reader._source_traceback
else:
self._stream_reader_wr = None
@@ -231,22 +230,6 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol):
self._over_ssl = False
self._closed = self._loop.create_future()
- def _on_reader_gc(self, wr):
- transport = self._transport
- if transport is not None:
- # connection_made was called
- context = {
- 'message': ('An open stream object is being garbage '
- 'collected; call "stream.close()" explicitly.')
- }
- if self._source_traceback:
- context['source_traceback'] = self._source_traceback
- self._loop.call_exception_handler(context)
- transport.abort()
- else:
- self._reject_connection = True
- self._stream_reader_wr = None
-
@property
def _stream_reader(self):
if self._stream_reader_wr is None:
diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py
index b9413ab..12bd536 100644
--- a/Lib/test/test_asyncio/test_streams.py
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -924,59 +924,6 @@ os.close(fd)
wr.close()
self.loop.run_until_complete(wr.wait_closed())
- def test_del_stream_before_sock_closing(self):
- messages = []
- self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-
- with test_utils.run_test_server() as httpd:
- with self.assertWarns(DeprecationWarning):
- rd, wr = self.loop.run_until_complete(
- asyncio.open_connection(*httpd.address, loop=self.loop))
- sock = wr.get_extra_info('socket')
- self.assertNotEqual(sock.fileno(), -1)
-
- wr.write(b'GET / HTTP/1.0\r\n\r\n')
- f = rd.readline()
- data = self.loop.run_until_complete(f)
- self.assertEqual(data, b'HTTP/1.0 200 OK\r\n')
-
- # drop refs to reader/writer
- del rd
- del wr
- gc.collect()
- # make a chance to close the socket
- test_utils.run_briefly(self.loop)
-
- self.assertEqual(1, len(messages))
- self.assertEqual(sock.fileno(), -1)
-
- self.assertEqual(1, len(messages))
- self.assertEqual('An open stream object is being garbage '
- 'collected; call "stream.close()" explicitly.',
- messages[0]['message'])
-
- def test_del_stream_before_connection_made(self):
- messages = []
- self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx))
-
- with test_utils.run_test_server() as httpd:
- rd = asyncio.StreamReader(loop=self.loop)
- pr = asyncio.StreamReaderProtocol(rd, loop=self.loop)
- del rd
- gc.collect()
- tr, _ = self.loop.run_until_complete(
- self.loop.create_connection(
- lambda: pr, *httpd.address))
-
- sock = tr.get_extra_info('socket')
- self.assertEqual(sock.fileno(), -1)
-
- self.assertEqual(1, len(messages))
- self.assertEqual('An open stream was garbage collected prior to '
- 'establishing network connection; '
- 'call "stream.close()" explicitly.',
- messages[0]['message'])
-
def test_async_writer_api(self):
async def inner(httpd):
rd, wr = await asyncio.open_connection(*httpd.address)