Mercurial > hg
changeset 17464:eddfb9a550d0
run-tests: do not duplicate killdaemons() code
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sun, 19 Aug 2012 16:41:09 +0200 |
parents | e49771e2d071 |
children | 2d4a096e213c |
files | tests/killdaemons.py tests/run-tests.py |
diffstat | 2 files changed, 38 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/killdaemons.py Fri Aug 31 13:17:16 2012 -0500 +++ b/tests/killdaemons.py Sun Aug 19 16:41:09 2012 +0200 @@ -2,24 +2,39 @@ import os, time, errno, signal -# Kill off any leftover daemon processes -try: - fp = open(os.environ['DAEMON_PIDS']) - for line in fp: - try: - pid = int(line) - except ValueError: - continue - try: - os.kill(pid, 0) - os.kill(pid, signal.SIGTERM) - for i in range(10): - time.sleep(0.05) +def killdaemons(pidfile, tryhard=True, remove=False, logfn=None): + if not logfn: + logfn = lambda s: s + # Kill off any leftover daemon processes + try: + fp = open(pidfile) + for line in fp: + try: + pid = int(line) + except ValueError: + continue + try: os.kill(pid, 0) - os.kill(pid, signal.SIGKILL) - except OSError, err: - if err.errno != errno.ESRCH: - raise - fp.close() -except IOError: - pass + logfn('# Killing daemon process %d' % pid) + os.kill(pid, signal.SIGTERM) + if tryhard: + for i in range(10): + time.sleep(0.05) + os.kill(pid, 0) + else: + time.sleep(0.1) + os.kill(pid, 0) + logfn('# Daemon process %d is stuck - really killing it' % pid) + os.kill(pid, signal.SIGKILL) + except OSError, err: + if err.errno != errno.ESRCH: + raise + fp.close() + if remove: + os.unlink(pidfile) + except IOError: + pass + +if __name__ == '__main__': + killdaemons(os.environ['DAEMON_PIDS']) +
--- a/tests/run-tests.py Fri Aug 31 13:17:16 2012 -0500 +++ b/tests/run-tests.py Sun Aug 19 16:41:09 2012 +0200 @@ -54,6 +54,7 @@ import time import re import threading +import killdaemons as killmod processlock = threading.Lock() @@ -348,29 +349,8 @@ pass def killdaemons(): - # Kill off any leftover daemon processes - try: - fp = open(DAEMON_PIDS) - for line in fp: - try: - pid = int(line) - except ValueError: - continue - try: - os.kill(pid, 0) - vlog('# Killing daemon process %d' % pid) - os.kill(pid, signal.SIGTERM) - time.sleep(0.1) - os.kill(pid, 0) - vlog('# Daemon process %d is stuck - really killing it' % pid) - os.kill(pid, signal.SIGKILL) - except OSError, err: - if err.errno != errno.ESRCH: - raise - fp.close() - os.unlink(DAEMON_PIDS) - except IOError: - pass + return killmod.killdaemons(DAEMON_PIDS, tryhard=False, remove=True, + logfn=vlog) def cleanup(options): if not options.keep_tmpdir: