[PATCH 1 of 8 V4] worker: move killworkers and waitforworkers up
Jun Wu
quark at fb.com
Sat Nov 12 03:11:32 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 e1a77dd540d28358884478fe5cb7d9ba1b41cef3
# Parent 038547a14d850f14ecd2671852093dc07848a134
# Available At https://bitbucket.org/quark-zju/hg-draft
# hg pull https://bitbucket.org/quark-zju/hg-draft -r e1a77dd540d2
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
@@ -87,4 +87,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()
@@ -104,18 +118,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