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/connection.py b/Lib/multiprocessing/connection.py
index 463d472..645a26f 100644
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -285,9 +285,13 @@
return conn
def close(self):
- self._socket.close()
- if self._unlink is not None:
- self._unlink()
+ try:
+ self._socket.close()
+ finally:
+ unlink = self._unlink
+ if unlink is not None:
+ self._unlink = None
+ unlink()
def SocketClient(address):