changeset: 105671:fcba55d649ea branch: 3.5 parent: 105667:092d4d83c50a user: Yury Selivanov date: Fri Dec 16 11:50:41 2016 -0500 files: Lib/asyncio/sslproto.py Lib/test/test_asyncio/test_sslproto.py Misc/NEWS description: Issue #28990: Fix SSL hanging if connection is closed before handshake completed. diff -r 092d4d83c50a -r fcba55d649ea Lib/asyncio/sslproto.py --- a/Lib/asyncio/sslproto.py Fri Dec 16 10:00:39 2016 +0100 +++ b/Lib/asyncio/sslproto.py Fri Dec 16 11:50:41 2016 -0500 @@ -479,6 +479,7 @@ self._loop.call_soon(self._app_protocol.connection_lost, exc) self._transport = None self._app_transport = None + self._wakeup_waiter(exc) def pause_writing(self): """Called when the low-level transport's buffer goes over diff -r 092d4d83c50a -r fcba55d649ea Lib/test/test_asyncio/test_sslproto.py --- a/Lib/test/test_asyncio/test_sslproto.py Fri Dec 16 10:00:39 2016 +0100 +++ b/Lib/test/test_asyncio/test_sslproto.py Fri Dec 16 11:50:41 2016 -0500 @@ -85,5 +85,15 @@ # Restore error logging. log.logger.setLevel(log_level) + def test_connection_lost(self): + # From issue #472. + # yield from waiter hang if lost_connection was called. + waiter = asyncio.Future(loop=self.loop) + ssl_proto = self.ssl_protocol(waiter) + self.connection_made(ssl_proto) + ssl_proto.connection_lost(ConnectionAbortedError) + test_utils.run_briefly(self.loop) + self.assertIsInstance(waiter.exception(), ConnectionAbortedError) + if __name__ == '__main__': unittest.main() diff -r 092d4d83c50a -r fcba55d649ea Misc/NEWS --- a/Misc/NEWS Fri Dec 16 10:00:39 2016 +0100 +++ b/Misc/NEWS Fri Dec 16 11:50:41 2016 -0500 @@ -485,6 +485,10 @@ - Issue #24142: Reading a corrupt config file left the parser in an invalid state. Original patch by Florian Höch. +- Issue #28990: Fix SSL hanging if connection is closed before handshake + completed. + (Patch by HoHo-Ho) + IDLE ----