Issue #23209: Break some reference cycles in asyncio. Patch written by Martin
Richard.
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
index 81698b0..afc434d 100644
--- a/Lib/asyncio/base_subprocess.py
+++ b/Lib/asyncio/base_subprocess.py
@@ -182,6 +182,7 @@
     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 e0e12f0..19212a9 100644
--- a/Lib/asyncio/futures.py
+++ b/Lib/asyncio/futures.py
@@ -405,5 +405,5 @@
     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 e4ad4cb..b2f4c2b 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -256,6 +256,7 @@
 
     def close(self):
         self._fd_to_key.clear()
+        self._map = None
 
     def get_map(self):
         return self._map