gh-115514: Fix incomplete writes after close while using ssl in asyncio(#128037)

Co-authored-by: Kumar Aditya <kumaraditya@python.org>
This commit is contained in:
Vojtěch Boček 2025-02-02 16:11:25 +01:00 committed by GitHub
parent 853a6b7de2
commit 4e38eeafe2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 213 additions and 5 deletions

View file

@ -1185,10 +1185,13 @@ class _SelectorSocketTransport(_SelectorTransport):
return True
def _call_connection_lost(self, exc):
super()._call_connection_lost(exc)
if self._empty_waiter is not None:
self._empty_waiter.set_exception(
ConnectionError("Connection is closed by peer"))
try:
super()._call_connection_lost(exc)
finally:
self._write_ready = None
if self._empty_waiter is not None:
self._empty_waiter.set_exception(
ConnectionError("Connection is closed by peer"))
def _make_empty_waiter(self):
if self._empty_waiter is not None:
@ -1203,7 +1206,6 @@ class _SelectorSocketTransport(_SelectorTransport):
def close(self):
self._read_ready_cb = None
self._write_ready = None
super().close()