Revision a570e2a8 lib/daemon.py
b/lib/daemon.py | ||
---|---|---|
37 | 37 |
self._io_wait = [] |
38 | 38 |
self._signal_wait = [] |
39 | 39 |
self.sigchld_handler = None |
40 |
self.sigterm_handler = None |
|
41 |
self.quit = False |
|
40 | 42 |
|
41 | 43 |
def Run(self): |
42 | 44 |
# TODO: Does not yet support adding new event sources while running |
... | ... | |
45 | 47 |
poller.register(fd, conditions) |
46 | 48 |
|
47 | 49 |
self.sigchld_handler = utils.SignalHandler([signal.SIGCHLD]) |
50 |
self.sigterm_handler = utils.SignalHandler([signal.SIGTERM]) |
|
48 | 51 |
try: |
49 |
while True:
|
|
52 |
while not self.quit:
|
|
50 | 53 |
try: |
51 | 54 |
io_events = poller.poll(1000) |
52 | 55 |
except select.error, err: |
... | ... | |
68 | 71 |
for owner in self._signal_wait: |
69 | 72 |
owner.OnSignal(signal.SIGCHLD) |
70 | 73 |
self.sigchld_handler.Clear() |
74 |
|
|
75 |
if self.sigterm_handler.called: |
|
76 |
self.quit = True |
|
77 |
self.sigterm_handler.Clear() |
|
71 | 78 |
finally: |
72 | 79 |
self.sigchld_handler.Reset() |
73 | 80 |
self.sigchld_handler = None |
81 |
self.sigterm_handler.Reset() |
|
82 |
self.sigterm_handler = None |
|
83 |
|
|
74 | 84 |
|
75 | 85 |
def RegisterIO(self, owner, fd, condition): |
76 | 86 |
"""Registers a receiver for I/O notifications |
Also available in: Unified diff