From: Pablo Galindo Date: Sat, 29 Dec 2018 19:18:38 +0000 (+0000) Subject: bpo-35602: Make sure the transport is always closed in SelectorEventLoopUnixSockSendf... X-Git-Tag: v3.8.0a1~177 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d51324a2f5d172665f8824b25456c9822797fc84;p=thirdparty%2FPython%2Fcpython.git bpo-35602: Make sure the transport is always closed in SelectorEventLoopUnixSockSendfileTests (GH-11338) There is a race condition in SelectorEventLoopUnixSockSendfileTests that causes the prepare() method return a non connected server protocol, making the cleanup() method skips the correct handling of the transport. This commit makes prepare() always return a connected server protocol that can always be cleaned up correctly. --- diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py index 62545c0f98c3..31e710037f76 100644 --- a/Lib/test/test_asyncio/test_unix_events.py +++ b/Lib/test/test_asyncio/test_unix_events.py @@ -449,10 +449,12 @@ class SelectorEventLoopUnixSockSendfileTests(test_utils.TestCase): self.data = bytearray() self.fut = loop.create_future() self.transport = None + self._ready = loop.create_future() def connection_made(self, transport): self.started = True self.transport = transport + self._ready.set_result(None) def data_received(self, data): self.data.extend(data) @@ -503,13 +505,11 @@ class SelectorEventLoopUnixSockSendfileTests(test_utils.TestCase): server = self.run_loop(self.loop.create_server( lambda: proto, sock=srv_sock)) self.run_loop(self.loop.sock_connect(sock, (support.HOST, port))) + self.run_loop(proto._ready) def cleanup(): - if proto.transport is not None: - # can be None if the task was cancelled before - # connection_made callback - proto.transport.close() - self.run_loop(proto.wait_closed()) + proto.transport.close() + self.run_loop(proto.wait_closed()) server.close() self.run_loop(server.wait_closed())