From: Victor Stinner Date: Thu, 15 Jan 2015 12:40:27 +0000 (+0100) Subject: asyncio: Fix _ProactorBasePipeTransport.close() X-Git-Tag: v3.4.3rc1~125 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fcd58de78f72ca114707b78e448397d6dbe2ad5d;p=python asyncio: Fix _ProactorBasePipeTransport.close() Set the _read_fut attribute to None after cancelling it. This change should fix a race condition with _ProactorWritePipeTransport._pipe_closed(). --- diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py index a177d32af6..6d8641feee 100644 --- a/Lib/asyncio/proactor_events.py +++ b/Lib/asyncio/proactor_events.py @@ -72,6 +72,7 @@ class _ProactorBasePipeTransport(transports._FlowControlMixin, self._loop.call_soon(self._call_connection_lost, None) if self._read_fut is not None: self._read_fut.cancel() + self._read_fut = None def _fatal_error(self, exc, message='Fatal error on pipe transport'): if isinstance(exc, (BrokenPipeError, ConnectionResetError)): @@ -93,9 +94,10 @@ class _ProactorBasePipeTransport(transports._FlowControlMixin, self._conn_lost += 1 if self._write_fut: self._write_fut.cancel() + self._write_fut = None if self._read_fut: self._read_fut.cancel() - self._write_fut = self._read_fut = None + self._read_fut = None self._pending_write = 0 self._buffer = None self._loop.call_soon(self._call_connection_lost, exc)