From e8e3f7572788cc0d5901148002d53b8ec751c1d8 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Thu, 18 Jun 2015 19:18:03 +0200 Subject: [PATCH] [FIX] workers: process signals during graceful shutdown to allow force shutdown Required after e17844c946879cdc3d4569da8a1e52ebeb8f8963 which enabled graceful shutdown of workers, including the cron worker. The latter may typically be busy on long-running tasks that will not be aborted by a simple graceful shutdown request. A typical shutdown sequence initiated by a daemon manager such as start-stop-daemon will involve multiple SIGTERM signals to ensure the process really stops in a timely manner. This was not possible after e17844c946879cdc3d4569da8a1e52ebeb8f8963 if any cron worker was busy. --- openerp/service/workers.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openerp/service/workers.py b/openerp/service/workers.py index 9264ef12996..b275f5cd8cd 100644 --- a/openerp/service/workers.py +++ b/openerp/service/workers.py @@ -186,6 +186,11 @@ class Multicorn(object): for pid in self.workers.keys(): self.worker_kill(pid, signal.SIGINT) while self.workers and time.time() < limit: + try: + self.process_signals() + except KeyboardInterrupt: + _logger.info("Forced shutdown.") + break self.process_zombie() time.sleep(0.1) else: