From: Yury Selivanov Date: Wed, 5 Aug 2015 18:06:23 +0000 (-0400) Subject: asyncio: Make sure BaseException is re-raised in SSLProtocol X-Git-Tag: v3.5.0rc1~6^2~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c125eb44b528ba22b43cdf5da49e408082865fa;p=python asyncio: Make sure BaseException is re-raised in SSLProtocol --- diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index e566946e22..e5ae49a5df 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -613,7 +613,8 @@ class SSLProtocol(protocols.Protocol): if data: ssldata, offset = self._sslpipe.feed_appdata(data, offset) elif offset: - ssldata = self._sslpipe.do_handshake(self._on_handshake_complete) + ssldata = self._sslpipe.do_handshake( + self._on_handshake_complete) offset = 1 else: ssldata = self._sslpipe.shutdown(self._finalize) @@ -637,9 +638,13 @@ class SSLProtocol(protocols.Protocol): self._write_buffer_size -= len(data) except BaseException as exc: if self._in_handshake: + # BaseExceptions will be re-raised in _on_handshake_complete. self._on_handshake_complete(exc) else: self._fatal_error(exc, 'Fatal error on SSL transport') + if not isinstance(exc, Exception): + # BaseException + raise def _fatal_error(self, exc, message='Fatal error on transport'): # Should be called from exception handler only.