diff options
| author | Barry Warsaw | 2009-10-06 23:03:57 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2009-10-06 23:03:57 -0400 |
| commit | eafec352555fae996be5fbb4d1992df9641a3aa6 (patch) | |
| tree | 8262b395f7de4df77ad676948492d56dc49a3b22 /src/mailman/bin/master.py | |
| parent | 4d65379e42136bacd84430f5a50d1fa733f0fdc9 (diff) | |
| download | mailman-eafec352555fae996be5fbb4d1992df9641a3aa6.tar.gz mailman-eafec352555fae996be5fbb4d1992df9641a3aa6.tar.zst mailman-eafec352555fae996be5fbb4d1992df9641a3aa6.zip | |
Diffstat (limited to 'src/mailman/bin/master.py')
| -rw-r--r-- | src/mailman/bin/master.py | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/mailman/bin/master.py b/src/mailman/bin/master.py index 579583c67..99555d890 100644 --- a/src/mailman/bin/master.py +++ b/src/mailman/bin/master.py @@ -27,12 +27,13 @@ __all__ = [ import os import sys +import time import errno import signal import socket import logging -from datetime import timedelta +from datetime import datetime, timedelta from lazr.config import as_boolean from locknix import lockfile from munepy import Enum @@ -46,6 +47,7 @@ from mailman.options import Options DOT = '.' LOCK_LIFETIME = timedelta(days=1, hours=6) SECONDS_IN_A_DAY = 86400 +SUBPROC_START_WAIT = timedelta(seconds=20) @@ -146,8 +148,8 @@ def master_state(): try: os.kill(pid, 0) return WatcherState.conflict - except OSError, e: - if e.errno == errno.ESRCH: + except OSError as error: + if error.errno == errno.ESRCH: # No matching process id. return WatcherState.stale_lock # Some other error occurred. @@ -405,10 +407,14 @@ class Loop: and configured to do so. """ log = logging.getLogger('mailman.qrunner') + # Sleep until a signal is received. This prevents the master from + # existing immediately even if there are no qrunners (as happens in + # the test suite). + signal.pause() while True: try: pid, status = os.wait() - except OSError, error: + except OSError as error: # No children? We're done. if error.errno == errno.ECHILD: break @@ -466,7 +472,7 @@ qrunner %s reached maximum restart limit of %d, not restarting.""", for pid in self._kids: try: os.kill(pid, signal.SIGTERM) - except OSError, error: + except OSError as error: if error.errno == errno.ESRCH: # The child has already exited. log.info('ESRCH on pid: %d', pid) @@ -476,10 +482,10 @@ qrunner %s reached maximum restart limit of %d, not restarting.""", # pylint: disable-msg=W0612 pid, status = os.wait() self._kids.drop(pid) - except OSError, e: - if e.errno == errno.ECHILD: + except OSError as error: + if error.errno == errno.ECHILD: break - elif e.errno == errno.EINTR: + elif error.errno == errno.EINTR: continue raise |
