From a570e2a84afc062135d0c4c3a273128a3ee68cf0 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Fri, 17 Oct 2008 11:08:10 +0000 Subject: [PATCH] Mainloop: handle sigterm This fixes removals of the pid files and clean exit in the init script Reviewed-by: iustinp --- lib/daemon.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/daemon.py b/lib/daemon.py index 0f6f540e3..0a3e865e0 100644 --- a/lib/daemon.py +++ b/lib/daemon.py @@ -37,6 +37,8 @@ class Mainloop(object): self._io_wait = [] self._signal_wait = [] self.sigchld_handler = None + self.sigterm_handler = None + self.quit = False def Run(self): # TODO: Does not yet support adding new event sources while running @@ -45,8 +47,9 @@ class Mainloop(object): poller.register(fd, conditions) self.sigchld_handler = utils.SignalHandler([signal.SIGCHLD]) + self.sigterm_handler = utils.SignalHandler([signal.SIGTERM]) try: - while True: + while not self.quit: try: io_events = poller.poll(1000) except select.error, err: @@ -68,9 +71,16 @@ class Mainloop(object): for owner in self._signal_wait: owner.OnSignal(signal.SIGCHLD) self.sigchld_handler.Clear() + + if self.sigterm_handler.called: + self.quit = True + self.sigterm_handler.Clear() finally: self.sigchld_handler.Reset() self.sigchld_handler = None + self.sigterm_handler.Reset() + self.sigterm_handler = None + def RegisterIO(self, owner, fd, condition): """Registers a receiver for I/O notifications -- GitLab