From e0545ee919d9a38a286f72d4e3275152d90e087b Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Wed, 16 Nov 2011 12:34:50 +0100 Subject: [PATCH] daemon: Use counter instead of boolean for mainloop abortion Also log a message when a fatal signal was received and use dict.items. Signed-off-by: Michael Hanselmann <hansmi@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/daemon.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/daemon.py b/lib/daemon.py index f5e18a25b..e229f7569 100644 --- a/lib/daemon.py +++ b/lib/daemon.py @@ -451,10 +451,12 @@ class Mainloop(object): assert isinstance(signal_handlers, dict) and \ len(signal_handlers) > 0, \ "Broken SignalHandled decorator" - running = True + + # Counter for received signals + shutdown_signals = 0 # Start actual main loop - while running: + while shutdown_signals < 1: if not self.scheduler.empty(): try: self.scheduler.run() @@ -464,11 +466,12 @@ class Mainloop(object): asyncore.loop(count=1, use_poll=True) # Check whether a signal was raised - for sig in signal_handlers: - handler = signal_handlers[sig] + for (sig, handler) in signal_handlers.items(): if handler.called: self._CallSignalWaiters(sig) - running = sig not in (signal.SIGTERM, signal.SIGINT) + if sig in (signal.SIGTERM, signal.SIGINT): + logging.info("Received signal %s asking for shutdown", sig) + shutdown_signals += 1 handler.Clear() def _CallSignalWaiters(self, signum): -- GitLab