diff options
author | Yury Selivanov <yury@magic.io> | 2018-05-29 01:00:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-29 01:00:12 -0400 |
commit | f295587c45f96b62d24f9a12cef6931b0805f596 (patch) | |
tree | 3a33afc7269203486b79f0f3e5b1a7d2d7e83be1 | |
parent | 3e51a3d5927c680d5410ff11ff8d5e5bb9ffb1e7 (diff) | |
download | cpython-git-f295587c45f96b62d24f9a12cef6931b0805f596.tar.gz |
bpo-33674: Pause the transport as early as possible (#7192)
-rw-r--r-- | Lib/asyncio/base_events.py | 7 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-05-29-00-37-56.bpo-33674.2IkGhL.rst | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index ffd2513e33..61938e90c3 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -1106,10 +1106,13 @@ class BaseEventLoop(events.AbstractEventLoop): ssl_handshake_timeout=ssl_handshake_timeout, call_connection_made=False) + # Pause early so that "ssl_protocol.data_received()" doesn't + # have a chance to get called before "ssl_protocol.connection_made()". + transport.pause_reading() + transport.set_protocol(ssl_protocol) self.call_soon(ssl_protocol.connection_made, transport) - if not transport.is_reading(): - self.call_soon(transport.resume_reading) + self.call_soon(transport.resume_reading) await waiter return ssl_protocol._app_transport diff --git a/Misc/NEWS.d/next/Library/2018-05-29-00-37-56.bpo-33674.2IkGhL.rst b/Misc/NEWS.d/next/Library/2018-05-29-00-37-56.bpo-33674.2IkGhL.rst new file mode 100644 index 0000000000..66baca16d6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-05-29-00-37-56.bpo-33674.2IkGhL.rst @@ -0,0 +1,2 @@ +Pause the transport as early as possible to further reduce the risk of +data_received() being called before connection_made(). |