bpo-33056 FIX leaking fd in concurrent.futures.ProcessPoolExecutor (G… · python/cpython@f216cbf (original) (raw)

Original file line number Diff line number Diff line change
@@ -78,11 +78,13 @@
78 78
79 79
80 80 class _ThreadWakeup:
81 -__slot__ = ["_state"]
82 -
83 81 def __init__(self):
84 82 self._reader, self._writer = mp.Pipe(duplex=False)
85 83
84 +def close(self):
85 +self._writer.close()
86 +self._reader.close()
87 +
86 88 def wakeup(self):
87 89 self._writer.send_bytes(b"")
88 90
@@ -654,6 +656,11 @@ def shutdown(self, wait=True):
654 656 self._call_queue = None
655 657 self._result_queue = None
656 658 self._processes = None
659 +
660 +if self._queue_management_thread_wakeup:
661 +self._queue_management_thread_wakeup.close()
662 +self._queue_management_thread_wakeup = None
663 +
657 664 shutdown.__doc__ = _base.Executor.shutdown.__doc__
658 665
659 666 atexit.register(_python_exit)