Revision e0545ee9 lib/daemon.py
b/lib/daemon.py | ||
---|---|---|
451 | 451 |
assert isinstance(signal_handlers, dict) and \ |
452 | 452 |
len(signal_handlers) > 0, \ |
453 | 453 |
"Broken SignalHandled decorator" |
454 |
running = True |
|
454 |
|
|
455 |
# Counter for received signals |
|
456 |
shutdown_signals = 0 |
|
455 | 457 |
|
456 | 458 |
# Start actual main loop |
457 |
while running:
|
|
459 |
while shutdown_signals < 1:
|
|
458 | 460 |
if not self.scheduler.empty(): |
459 | 461 |
try: |
460 | 462 |
self.scheduler.run() |
... | ... | |
464 | 466 |
asyncore.loop(count=1, use_poll=True) |
465 | 467 |
|
466 | 468 |
# Check whether a signal was raised |
467 |
for sig in signal_handlers: |
|
468 |
handler = signal_handlers[sig] |
|
469 |
for (sig, handler) in signal_handlers.items(): |
|
469 | 470 |
if handler.called: |
470 | 471 |
self._CallSignalWaiters(sig) |
471 |
running = sig not in (signal.SIGTERM, signal.SIGINT) |
|
472 |
if sig in (signal.SIGTERM, signal.SIGINT): |
|
473 |
logging.info("Received signal %s asking for shutdown", sig) |
|
474 |
shutdown_signals += 1 |
|
472 | 475 |
handler.Clear() |
473 | 476 |
|
474 | 477 |
def _CallSignalWaiters(self, signum): |
Also available in: Unified diff