From: Victor Stinner Date: Tue, 29 May 2018 04:46:48 +0000 (+0200) Subject: bpo-33674: asyncio: Fix SSLProtocol race (GH-7175) (GH-7188) X-Git-Tag: v3.6.6rc1~84 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7593b8a5075ff45d71be9f62980be6a9c005afa9;p=python bpo-33674: asyncio: Fix SSLProtocol race (GH-7175) (GH-7188) Fix a race condition in SSLProtocol.connection_made() of asyncio.sslproto: start immediately the handshake instead of using call_soon(). Previously, data_received() could be called before the handshake started, causing the handshake to hang or fail. (cherry picked from commit be00a5583a2cb696335c527b921d1868266a42c6) --- diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index a82babb6b9..367f7d07a4 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -574,7 +574,7 @@ class SSLProtocol(protocols.Protocol): # (b'', 1) is a special value in _process_write_backlog() to do # the SSL handshake self._write_backlog.append((b'', 1)) - self._loop.call_soon(self._process_write_backlog) + self._process_write_backlog() def _on_handshake_complete(self, handshake_exc): self._in_handshake = False diff --git a/Misc/NEWS.d/next/Library/2018-05-28-22-49-59.bpo-33674.6LFFj7.rst b/Misc/NEWS.d/next/Library/2018-05-28-22-49-59.bpo-33674.6LFFj7.rst new file mode 100644 index 0000000000..1e9868073f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-05-28-22-49-59.bpo-33674.6LFFj7.rst @@ -0,0 +1,4 @@ +Fix a race condition in SSLProtocol.connection_made() of asyncio.sslproto: +start immediately the handshake instead of using call_soon(). Previously, +data_received() could be called before the handshake started, causing the +handshake to hang or fail.