changeset: 105672:fcc642bf88c1 branch: 3.6 parent: 105668:598a00a4540a parent: 105671:fcba55d649ea user: Yury Selivanov date: Fri Dec 16 11:51:57 2016 -0500 files: Lib/asyncio/sslproto.py Misc/NEWS description: Merge 3.5 (issue #28990) diff -r 598a00a4540a -r fcc642bf88c1 Lib/asyncio/sslproto.py --- a/Lib/asyncio/sslproto.py Fri Dec 16 10:00:53 2016 +0100 +++ b/Lib/asyncio/sslproto.py Fri Dec 16 11:51:57 2016 -0500 @@ -480,6 +480,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 598a00a4540a -r fcc642bf88c1 Lib/test/test_asyncio/test_sslproto.py --- a/Lib/test/test_asyncio/test_sslproto.py Fri Dec 16 10:00:53 2016 +0100 +++ b/Lib/test/test_asyncio/test_sslproto.py Fri Dec 16 11:51:57 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 598a00a4540a -r fcc642bf88c1 Misc/NEWS --- a/Misc/NEWS Fri Dec 16 10:00:53 2016 +0100 +++ b/Misc/NEWS Fri Dec 16 11:51:57 2016 -0500 @@ -44,6 +44,10 @@ now when the grp module cannot be imported, as for example on Android platforms. +- Issue #28990: Fix SSL hanging if connection is closed before handshake + completed. + (Patch by HoHo-Ho) + Windows -------