Mercurial > hg-stable
changeset 30433:f2d13eb85198
worker: kill workers after all zombie processes are reaped
Since we now wait child processes in non-blocking way (changed by 7bc25549e084
and e8fb03cfbbde), we don't have to kill them in the middle of the waitpid()
loop. This change will help solving a possible race of waitpid()-pids.discard()
sequence and another SIGCHLD.
waitforworkers() is called by cleanup(), in which case we do killworkers()
beforehand so we can remove killworkers() from waitforworkers().
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 17 Nov 2016 21:08:58 +0900 |
parents | 237b2883cbd8 |
children | 03f7aa2bd0e3 |
files | mercurial/worker.py |
diffstat | 1 files changed, 2 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/worker.py Thu Nov 17 20:44:05 2016 +0900 +++ b/mercurial/worker.py Thu Nov 17 21:08:58 2016 +0900 @@ -119,9 +119,10 @@ st = _exitstatus(st) if st and not problem[0]: problem[0] = st - killworkers() def sigchldhandler(signum, frame): waitforworkers(blocking=False) + if problem[0]: + killworkers() oldchldhandler = signal.signal(signal.SIGCHLD, sigchldhandler) for pargs in partition(args, workers): pid = os.fork()