From 587feb19e8f9c967e6f88ecd85eca962a57d5410 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 9 Jan 2015 21:34:27 +0100 Subject: [PATCH] Issue #23209: Break some reference cycles in asyncio. Patch written by Martin Richard. --- Lib/asyncio/base_subprocess.py | 1 + Lib/asyncio/futures.py | 2 +- Lib/selectors.py | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py index 81698b09850..afc434defa2 100644 --- a/Lib/asyncio/base_subprocess.py +++ b/Lib/asyncio/base_subprocess.py @@ -182,6 +182,7 @@ class WriteSubprocessPipeProto(protocols.BaseProtocol): def connection_lost(self, exc): self.disconnected = True self.proc._pipe_connection_lost(self.fd, exc) + self.proc = None def pause_writing(self): self.proc._protocol.pause_writing() diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index e0e12f0579b..19212a94b9f 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -405,5 +405,5 @@ def wrap_future(fut, *, loop=None): new_future.add_done_callback(_check_cancel_other) fut.add_done_callback( lambda future: loop.call_soon_threadsafe( - new_future._copy_state, fut)) + new_future._copy_state, future)) return new_future diff --git a/Lib/selectors.py b/Lib/selectors.py index e4ad4cb18c4..b2f4c2bad22 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -256,6 +256,7 @@ class _BaseSelectorImpl(BaseSelector): def close(self): self._fd_to_key.clear() + self._map = None def get_map(self): return self._map