Parcourir la source

Close pipes when necessary.

writebuffer -> logbuffer
Chris McDonough il y a 19 ans
Parent
commit
9920942dc2
2 fichiers modifiés avec 14 ajouts et 12 suppressions
  1. 9 6
      src/supervisor/supervisord.py
  2. 5 6
      src/supervisor/tests.py

+ 9 - 6
src/supervisor/supervisord.py

@@ -221,13 +221,16 @@ class Subprocess:
                 fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | os.O_NDELAY)
             return pipes
         except OSError:
-            for fd in pipes.values():
-                try:
-                    os.close(fd)
-                except:
-                    pass
+            self.close_pipes(pipes)
             raise
 
+    def close_pipes(self, pipes):
+        for fd in pipes.values():
+            try:
+                os.close(fd)
+            except:
+                pass
+
     def record_spawnerr(self, msg):
         self.spawnerr = msg
         self.options.logger.critical("spawnerr: %s" % msg)
@@ -270,7 +273,6 @@ class Subprocess:
                 msg = 'too many open files to spawn %r' % pname
             else:
                 msg = 'unknown error: %s' % str(why)
-
             self.record_spawnerr(msg)
             return
 
@@ -286,6 +288,7 @@ class Subprocess:
                 msg = 'unknown error: %s' % str(why)
 
             self.record_spawnerr(msg)
+            self.close_pipes(self.pipes)
             return
 
         if pid != 0:

+ 5 - 6
src/supervisor/tests.py

@@ -1743,13 +1743,12 @@ class DummyProcess:
     pipes = None
     childlog = None # the current logger 
     spawnerr = None
-    writebuffer = '' # buffer of characters to send to child process' stdin
+    logbuffer = '' # buffer of characters to send to child process' stdin
     reportstatusmsg = None # message attached to instance during reportstatus()
     
     def __init__(self, options, config, state=ProcessStates.RUNNING):
         self.options = options
         self.config = config
-        self.writebuffer = ''
         self.childlog = DummyLogger()
         self.logsremoved = False
         self.stop_called = False
@@ -1760,8 +1759,8 @@ class DummyProcess:
         self.status_reported = False
         self.killed_with = None
         self.drained = False
-        self.writebuffer = ''
-        self.writebuffer_logged = ''
+        self.logbuffer = ''
+        self.logged = ''
         self.pipes = {}
 
     def removelogs(self):
@@ -1802,8 +1801,8 @@ class DummyProcess:
         return []
 
     def log_output(self):
-        self.writebuffer_logged = self.writebuffer_logged + self.writebuffer
-        self.writebuffer = ''
+        self.logged = self.logged + self.logbuffer
+        self.logbuffer = ''
 
 class DummyPConfig:
     def __init__(self, name, command, priority=999, autostart=True,