浏览代码

Merge remote-tracking branch 'msabramo/feature.py3.fix_two_unclosed_sockets_on_errors' into merge.py3k

Gavin Carothers 11 年之前
父节点
当前提交
ca170824bf
共有 1 个文件被更改,包括 9 次插入4 次删除
  1. 9 4
      supervisor/datatypes.py

+ 9 - 4
supervisor/datatypes.py

@@ -212,8 +212,12 @@ class InetStreamSocketConfig(SocketConfig):
 
 
     def create_and_bind(self):
     def create_and_bind(self):
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-        sock.bind(self.addr())
+        try:
+            sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+            sock.bind(self.addr())
+        except:
+            sock.close()
+            raise
         return sock
         return sock
 
 
 class UnixStreamSocketConfig(SocketConfig):
 class UnixStreamSocketConfig(SocketConfig):
@@ -237,13 +241,14 @@ class UnixStreamSocketConfig(SocketConfig):
         if os.path.exists(self.path):
         if os.path.exists(self.path):
             os.unlink(self.path)
             os.unlink(self.path)
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-        sock.bind(self.addr())
         try:
         try:
+            sock.bind(self.addr())
             self._chown()
             self._chown()
             self._chmod()
             self._chmod()
         except:
         except:
             sock.close()
             sock.close()
-            os.unlink(self.path)
+            if os.path.exists(self.path):
+                os.unlink(self.path)
             raise
             raise
         return sock
         return sock