Pārlūkot izejas kodu

Better reaper, catch occasional bad WS header line.

Call waitpid in loop to catch SIGCHLD signals that happen while
handling the original SIGCHLD signal.

Pulled from websockify.
Joel Martin 14 gadi atpakaļ
vecāks
revīzija
215ae8e564
1 mainītis faili ar 11 papildinājumiem un 3 dzēšanām
  1. 11 3
      utils/websocket.py

+ 11 - 3
utils/websocket.py

@@ -147,7 +147,10 @@ Connection: Upgrade\r
         ret['path'] = req_lines[0].split(" ")[1]
         for line in req_lines[1:]:
             if line == "": break
-            var, val = line.split(": ")
+            try:
+                var, val = line.split(": ")
+            except:
+                raise Exception("Invalid handshake header: %s" % line)
             ret[var] = val
 
         if req_lines[-2] == "":
@@ -315,12 +318,17 @@ Connection: Upgrade\r
         #self.vmsg("Running poll()")
         pass
 
-
     def top_SIGCHLD(self, sig, stack):
         # Reap zombies after calling child SIGCHLD handler
         self.do_SIGCHLD(sig, stack)
         self.vmsg("Got SIGCHLD, reaping zombies")
-        os.waitpid(-1, os.WNOHANG)
+        try:
+            result = os.waitpid(-1, os.WNOHANG)
+            while result[0]:
+                self.vmsg("Reaped child process %s" % result[0])
+                result = os.waitpid(-1, os.WNOHANG)
+        except (OSError):
+            pass
 
     def do_SIGCHLD(self, sig, stack):
         pass