Barry Warsaw pushed to branch master at mailman / Mailman

Commits:
d113a345 by Barry Warsaw at 2017-02-01T20:12:02-05:00
Fix signal handler exception.

- - - - -
f9437b07 by Barry Warsaw at 2017-02-02T14:59:36+00:00
Merge branch 'fix-signals' into 'master'

Fix signal handler exception

See merge request !242
- - - - -


1 changed file:

- src/mailman/core/runner.py


Changes:

=====================================
src/mailman/core/runner.py
=====================================
--- a/src/mailman/core/runner.py
+++ b/src/mailman/core/runner.py
@@ -92,23 +92,24 @@ class Runner:
             signal.SIGINT: 'SIGINT',
             signal.SIGUSR1: 'SIGUSR1',
             }.get(signum, signum)
-        if signum in (signal.SIGTERM, signal.SIGINT, signal.SIGUSR1):
+        if signum == signal.SIGHUP:
+            reopen()
+            rlog.info('%s runner caught SIGHUP.  Reopening logs.', self.name)
+        elif signum in (signal.SIGTERM, signal.SIGINT, signal.SIGUSR1):
             self.stop()
             self.status = signum
             rlog.info('%s runner caught %s.  Stopping.', self.name, signame)
-        elif signum == signal.SIGHUP:
-            reopen()
-            rlog.info('%s runner caught SIGHUP.  Reopening logs.', self.name)
-        # As of Python 3.5, PEP 475 gets in our way.  Runners with long
-        # time.sleep()'s in their _snooze() method (e.g. the retry runner) will
-        # have their system call implemented time.sleep() automatically retried
-        # at the C layer.  The only reliable way to prevent this is to raise an
-        # exception in the signal handler.  The standard run() method
-        # automatically suppresses this exception, meaning, it's caught and
-        # ignored, but effectively breaks the run() loop, which is just what we
-        # want.  Runners which implement their own run() method must be
-        # prepared to catch RunnerInterrupts, usually also ignoring them.
-        raise RunnerInterrupt
+            # As of Python 3.5, PEP 475 gets in our way.  Runners with long
+            # time.sleep()'s in their _snooze() method (e.g. the retry runner)
+            # will have their system call implemented time.sleep()
+            # automatically retried at the C layer.  The only reliable way to
+            # prevent this is to raise an exception in the signal handler.  The
+            # standard run() method automatically suppresses this exception,
+            # meaning, it's caught and ignored, but effectively breaks the
+            # run() loop, which is just what we want.  Runners which implement
+            # their own run() method must be prepared to catch
+            # RunnerInterrupts, usually also ignoring them.
+            raise RunnerInterrupt
 
     def set_signals(self):
         """See `IRunner`."""



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/36ffac9b6721c9227f7ceb8f04f214c0c75f8e50...f9437b07e0fafff132f1c6d6567079986aed86e3
_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to