[PATCH 1 of 3] run-tests: do not duplicate killdaemons() code
Patrick Mezard
patrick at mezard.eu
Sun Aug 19 14:22:39 CDT 2012
# HG changeset patch
# User Patrick Mezard <patrick at mezard.eu>
# Date 1345387269 -7200
# Node ID c581659d731a035d6768b7ffb33296ebdfc3cae7
# Parent a10f7eeb2588ae469b996288b0d2554ccbe409da
run-tests: do not duplicate killdaemons() code
diff --git a/tests/killdaemons.py b/tests/killdaemons.py
--- a/tests/killdaemons.py
+++ b/tests/killdaemons.py
@@ -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'])
+
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -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:
More information about the Mercurial-devel
mailing list