[PATCH 1 of 8 V5] worker: move killworkers and waitforworkers up
Jun Wu
quark at fb.com
Tue Nov 15 02:39:04 UTC 2016
# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1469735397 -3600
# Thu Jul 28 20:49:57 2016 +0100
# Node ID 7a81772420713713fb372966a9018c20083beaed
# Parent d1a0a64f6e16432333bea0476098c46a61222b9b
# Available At https://bitbucket.org/quark-zju/hg-draft
# hg pull https://bitbucket.org/quark-zju/hg-draft -r 7a8177242071
worker: move killworkers and waitforworkers up
We need to use them in the SIGCHLD handler and SIGCHLD handler should be
installed before fork.
diff --git a/mercurial/worker.py b/mercurial/worker.py
--- a/mercurial/worker.py
+++ b/mercurial/worker.py
@@ -90,4 +90,18 @@ def _posixworker(ui, func, staticargs, a
signal.signal(signal.SIGINT, signal.SIG_IGN)
pids, problem = [], [0]
+ def killworkers():
+ # if one worker bails, there's no good reason to wait for the rest
+ for p in pids:
+ try:
+ os.kill(p, signal.SIGTERM)
+ except OSError as err:
+ if err.errno != errno.ESRCH:
+ raise
+ def waitforworkers():
+ for _pid in pids:
+ st = _exitstatus(os.wait()[1])
+ if st and not problem[0]:
+ problem[0] = st
+ killworkers()
for pargs in partition(args, workers):
pid = os.fork()
@@ -107,18 +121,4 @@ def _posixworker(ui, func, staticargs, a
os.close(wfd)
fp = os.fdopen(rfd, 'rb', 0)
- def killworkers():
- # if one worker bails, there's no good reason to wait for the rest
- for p in pids:
- try:
- os.kill(p, signal.SIGTERM)
- except OSError as err:
- if err.errno != errno.ESRCH:
- raise
- def waitforworkers():
- for _pid in pids:
- st = _exitstatus(os.wait()[1])
- if st and not problem[0]:
- problem[0] = st
- killworkers()
t = threading.Thread(target=waitforworkers)
t.start()
More information about the Mercurial-devel
mailing list