]> granicus.if.org Git - python/commitdiff
bpo-31647: Fix write_eof() after close() for SelectorSocketTransport (GH-7149) (...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 28 May 2018 20:25:03 +0000 (13:25 -0700)
committerYury Selivanov <yury@magic.io>
Mon, 28 May 2018 20:25:03 +0000 (16:25 -0400)
Fixed bug where calling write_eof() on a _SelectorSocketTransport after
it's already closed raises AttributeError.
(cherry picked from commit 23f587e395e41bd5e116312b036183f42bc4159b)

Co-authored-by: twisteroid ambassador <twisteroidambassador@users.noreply.github.com>
Lib/asyncio/selector_events.py
Lib/test/test_asyncio/test_selector_events.py
Misc/NEWS.d/next/Library/2018-05-28-18-40-26.bpo-31467.s4Fad3.rst [new file with mode: 0644]

index c7e7909449eb4961866a749ecae714c4a2f10be7..81dfd7651c5ed0a8432a7c175a5e3d238bcc9726 100644 (file)
@@ -804,7 +804,7 @@ class _SelectorSocketTransport(_SelectorTransport):
                     self._sock.shutdown(socket.SHUT_WR)
 
     def write_eof(self):
-        if self._eof:
+        if self._closing or self._eof:
             return
         self._eof = True
         if not self._buffer:
index 0794e994c9d4380bfef0acaa153f9c9e9e92a82f..c359b458029db292fbe7c9046e367715dfb40eb2 100644 (file)
@@ -1187,6 +1187,12 @@ class SelectorSocketTransportTests(test_utils.TestCase):
         self.sock.shutdown.assert_called_with(socket.SHUT_WR)
         tr.close()
 
+    def test_write_eof_after_close(self):
+        tr = self.socket_transport()
+        tr.close()
+        self.loop.run_until_complete(asyncio.sleep(0))
+        tr.write_eof()
+
     @mock.patch('asyncio.base_events.logger')
     def test_transport_close_remove_writer(self, m_log):
         remove_writer = self.loop._remove_writer = mock.Mock()
diff --git a/Misc/NEWS.d/next/Library/2018-05-28-18-40-26.bpo-31467.s4Fad3.rst b/Misc/NEWS.d/next/Library/2018-05-28-18-40-26.bpo-31467.s4Fad3.rst
new file mode 100644 (file)
index 0000000..61cc8ba
--- /dev/null
@@ -0,0 +1,2 @@
+Fixed bug where calling write_eof() on a _SelectorSocketTransport after it's
+already closed raises AttributeError.