Pārlūkot izejas kodu

Fix 2 unclosed sockets that can happen on errors in
supervisor/datatypes.py

Fixes 2 of the `ResourceWarning` warnings in GH-391.

Marc Abramowitz 11 gadi atpakaļ
vecāks
revīzija
08d27f2d34
1 mainītis faili ar 9 papildinājumiem un 4 dzēšanām
  1. 9 4
      supervisor/datatypes.py

+ 9 - 4
supervisor/datatypes.py

@@ -214,8 +214,12 @@ class InetStreamSocketConfig(SocketConfig):
 
     def create_and_bind(self):
         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
 
 class UnixStreamSocketConfig(SocketConfig):
@@ -239,13 +243,14 @@ class UnixStreamSocketConfig(SocketConfig):
         if os.path.exists(self.path):
             os.unlink(self.path)
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-        sock.bind(self.addr())
         try:
+            sock.bind(self.addr())
             self._chown()
             self._chmod()
         except:
             sock.close()
-            os.unlink(self.path)
+            if os.path.exists(self.path):
+                os.unlink(self.path)
             raise
         return sock