From 7c30c1e9aeeed962037f22cda91e5acd1b9a981a Mon Sep 17 00:00:00 2001 From: Curt Micol Date: Sun, 10 Jan 2010 07:08:05 -0500 Subject: [PATCH] Fix crashing issue with signals TTIN and TTOU. Also clear out zombie procs left by those signals. --- gunicorn/arbiter.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index f9c261a0..a5f6c53d 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -205,7 +205,8 @@ class Arbiter(object): self.kill_workers(signal.SIGKILL) def murder_workers(self): - for (pid, worker) in self.WORKERS.iteritems(): + running_workers = tuple(self.WORKERS.iteritems()) + for (pid, worker) in running_workers: diff = time.time() - os.fstat(worker.tmp.fileno()).st_mtime if diff < self.timeout: continue @@ -267,7 +268,10 @@ class Arbiter(object): def kill_worker(self, pid, sig): worker = self.WORKERS.pop(pid) try: - os.kill(pid, sig) + os.kill(pid, sig) + kpid, stat = os.waitpid(pid, os.WNOHANG) + if kpid: + log.warning("Problem killing process: %s" % pid) except OSError, e: if e.errno == errno.ESRCH: pass