Issue #8184: Fix a potential file descriptor leak when a
authorCharles-François Natali <neologix@free.fr>
Sat, 4 Feb 2012 13:40:25 +0000 (14:40 +0100)
committerCharles-François Natali <neologix@free.fr>
Sat, 4 Feb 2012 13:40:25 +0000 (14:40 +0100)
multiprocessing.Connection socket can't be bound.

Lib/multiprocessing/connection.py

index 090796ead3cbcad95570fe8b1b9f071dfc639a1c..530a8dfe4e5e028e73cb248a8cc8f5dd624865a4 100644 (file)
@@ -249,10 +249,14 @@ class SocketListener(object):
     '''
     def __init__(self, address, family, backlog=1):
         self._socket = socket.socket(getattr(socket, family))
-        self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-        self._socket.bind(address)
-        self._socket.listen(backlog)
-        self._address = self._socket.getsockname()
+        try:
+            self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+            self._socket.bind(address)
+            self._socket.listen(backlog)
+            self._address = self._socket.getsockname()
+        except socket.error:
+            self._socket.close()
+            raise
         self._family = family
         self._last_accepted = None