summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman/bin/qrunner.py6
-rw-r--r--src/mailman/interfaces/runner.py8
-rw-r--r--src/mailman/queue/__init__.py2
-rw-r--r--src/mailman/queue/rest.py2
4 files changed, 16 insertions, 2 deletions
diff --git a/src/mailman/bin/qrunner.py b/src/mailman/bin/qrunner.py
index b6891c7f6..9c02a5c4d 100644
--- a/src/mailman/bin/qrunner.py
+++ b/src/mailman/bin/qrunner.py
@@ -226,7 +226,8 @@ def main():
def stop(self):
self._qrunner.stop()
loop = Loop(qrunner)
- set_signals(loop)
+ if qrunner.intercept_signals:
+ set_signals(loop)
# Now start up the main loop
log = logging.getLogger('mailman.qrunner')
log.info('%s qrunner started.', loop.name())
@@ -250,7 +251,8 @@ def main():
def isdone(self):
return self._isdone
loop = Loop()
- set_signals(loop)
+ if qrunner.intercept_signals:
+ set_signals(loop)
log.info('Main qrunner loop started.')
while not loop.isdone():
for qrunner in qrunners:
diff --git a/src/mailman/interfaces/runner.py b/src/mailman/interfaces/runner.py
index e923e099b..4fe8ae0a3 100644
--- a/src/mailman/interfaces/runner.py
+++ b/src/mailman/interfaces/runner.py
@@ -47,6 +47,14 @@ class IRunner(Interface):
`config.QRUNNER_SLEEP_TIME`
""")
+ intercept_signals = Attribute("""\
+ Should the qrunner mechanism intercept signals?
+
+ In general, the qrunner catches SIGINT, SIGTERM, SIGUSR1, and SIGHUP
+ to manage the process. Some qrunners need to manage their own
+ signals, and set this attribute to False.
+ """)
+
def _one_iteration():
"""The work done in one iteration of the main loop.
diff --git a/src/mailman/queue/__init__.py b/src/mailman/queue/__init__.py
index b7c6eb1a5..ae3666643 100644
--- a/src/mailman/queue/__init__.py
+++ b/src/mailman/queue/__init__.py
@@ -281,6 +281,8 @@ class Switchboard:
class Runner:
implements(IRunner)
+ intercept_signals = True
+
def __init__(self, name, slice=None):
"""Create a queue runner.
diff --git a/src/mailman/queue/rest.py b/src/mailman/queue/rest.py
index 148622d2b..02d110910 100644
--- a/src/mailman/queue/rest.py
+++ b/src/mailman/queue/rest.py
@@ -40,6 +40,8 @@ log = logging.getLogger('mailman.http')
class RESTRunner(Runner):
+ intercept_signals = False
+
def run(self):
log.info('Starting REST server')
try: