From 2bc67cc8b825d5456ed9cd25199435911a6d5077 Mon Sep 17 00:00:00 2001 From: benoitc Date: Mon, 10 May 2010 12:25:34 +0200 Subject: [PATCH] better handling of QUIT/HUP soignal to fix issue #49. We want graceful quit or restart if possible. --- gunicorn/workers/base.py | 1 - gunicorn/workers/geventlet.py | 5 +++-- gunicorn/workers/ggevent.py | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gunicorn/workers/base.py b/gunicorn/workers/base.py index 947f69c8..cf88d583 100644 --- a/gunicorn/workers/base.py +++ b/gunicorn/workers/base.py @@ -103,7 +103,6 @@ class Worker(object): def handle_quit(self, sig, frame): self.alive = False - os._exit(3) def handle_exit(self, sig, frame): self.alive = False diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index d29e1821..5f870af8 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -38,7 +38,7 @@ class EventletWorker(AsyncWorker): pool = greenpool.GreenPool(self.worker_connections) acceptor = greenthread.spawn(self.acceptor, pool) - while True: + while self.alive: self.notify() if self.ppid != os.getppid(): @@ -50,10 +50,11 @@ class EventletWorker(AsyncWorker): with eventlet.Timeout(self.timeout, False): pool.waitall() + os._exit(3) def acceptor(self, pool): greenthread.getcurrent() - while True: + while self.alive: try: conn, addr = self.socket.accept() gt = pool.spawn(self.handle, conn, addr) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index ffde163a..89ff95e1 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -35,7 +35,7 @@ class GEventWorker(AsyncWorker): acceptor = gevent.spawn(self.acceptor, pool) try: - while True: + while self.alive: self.notify() if self.ppid != os.getppid(): @@ -47,6 +47,7 @@ class GEventWorker(AsyncWorker): pool.join(timeout=self.timeout) except KeyboardInterrupt: pass + os._exit(3) def acceptor(self, pool): gevent.getcurrent()