Skip to content

Commit 7e8819a

Browse files
miss-islingtontwisteroidambassador
authored andcommitted
bpo-31647: Fix write_eof() after close() for SelectorSocketTransport (GH-7149) (#7154)
Fixed bug where calling write_eof() on a _SelectorSocketTransport after it's already closed raises AttributeError. (cherry picked from commit 23f587e) Co-authored-by: twisteroid ambassador <twisteroidambassador@users.noreply.github.com>
1 parent c489a76 commit 7e8819a

3 files changed

Lines changed: 9 additions & 1 deletion

File tree

Lib/asyncio/selector_events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ def _write_ready(self):
804804
self._sock.shutdown(socket.SHUT_WR)
805805

806806
def write_eof(self):
807-
if self._eof:
807+
if self._closing or self._eof:
808808
return
809809
self._eof = True
810810
if not self._buffer:

Lib/test/test_asyncio/test_selector_events.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,6 +1187,12 @@ def test_write_eof_buffer(self):
11871187
self.sock.shutdown.assert_called_with(socket.SHUT_WR)
11881188
tr.close()
11891189

1190+
def test_write_eof_after_close(self):
1191+
tr = self.socket_transport()
1192+
tr.close()
1193+
self.loop.run_until_complete(asyncio.sleep(0))
1194+
tr.write_eof()
1195+
11901196
@mock.patch('asyncio.base_events.logger')
11911197
def test_transport_close_remove_writer(self, m_log):
11921198
remove_writer = self.loop._remove_writer = mock.Mock()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed bug where calling write_eof() on a _SelectorSocketTransport after it's
2+
already closed raises AttributeError.

0 commit comments

Comments
 (0)