Issue #23865: close() methods in multiple modules now are idempotent and more
robust at shutdown. If needs to release multiple resources, they are released
even if errors are occured.
diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py
index 487e0af..a88e298 100644
--- a/Lib/multiprocessing/queues.py
+++ b/Lib/multiprocessing/queues.py
@@ -156,9 +156,13 @@
def close(self):
self._closed = True
- self._reader.close()
- if self._close:
- self._close()
+ try:
+ self._reader.close()
+ finally:
+ close = self._close
+ if close:
+ self._close = None
+ close()
def join_thread(self):
debug('Queue.join_thread()')