From 41ed958ee6f0ff15836e11013d1cada8c3ae90fc Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 15 Jan 2015 13:16:50 +0100 Subject: [PATCH] Issue #23243: Fix asyncio._UnixWritePipeTransport.close() Do nothing if the transport is already closed. Before it was not possible to close the transport twice. --- Lib/asyncio/unix_events.py | 2 +- Lib/test/test_asyncio/test_unix_events.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index 14b48438ac91..9f4005cb13a6 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -516,7 +516,7 @@ def write_eof(self): self._loop.call_soon(self._call_connection_lost, None) def close(self): - if not self._closing: + if self._pipe is not None and not self._closing: # write_eof is all what we needed to close the write pipe self.write_eof() diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py index 5f4b024496d8..4a68ce36b655 100644 --- a/Lib/test/test_asyncio/test_unix_events.py +++ b/Lib/test/test_asyncio/test_unix_events.py @@ -766,6 +766,9 @@ def test_close(self): tr.close() tr.write_eof.assert_called_with() + # closing the transport twice must not fail + tr.close() + def test_close_closing(self): tr = unix_events._UnixWritePipeTransport( self.loop, self.pipe, self.protocol)