Show More
@@ -89,6 +89,10 def _posixworker(ui, func, staticargs, a | |||||
89 | signal.signal(signal.SIGINT, signal.SIG_IGN) |
|
89 | signal.signal(signal.SIGINT, signal.SIG_IGN) | |
90 | pids, problem = set(), [0] |
|
90 | pids, problem = set(), [0] | |
91 | def killworkers(): |
|
91 | def killworkers(): | |
|
92 | # unregister SIGCHLD handler as all children will be killed. This | |||
|
93 | # function shouldn't be interrupted by another SIGCHLD; otherwise pids | |||
|
94 | # could be updated while iterating, which would cause inconsistency. | |||
|
95 | signal.signal(signal.SIGCHLD, oldchldhandler) | |||
92 | # if one worker bails, there's no good reason to wait for the rest |
|
96 | # if one worker bails, there's no good reason to wait for the rest | |
93 | for p in pids: |
|
97 | for p in pids: | |
94 | try: |
|
98 | try: | |
@@ -115,8 +119,6 def _posixworker(ui, func, staticargs, a | |||||
115 | st = _exitstatus(st) |
|
119 | st = _exitstatus(st) | |
116 | if st and not problem[0]: |
|
120 | if st and not problem[0]: | |
117 | problem[0] = st |
|
121 | problem[0] = st | |
118 | # unregister SIGCHLD handler as all children will be killed |
|
|||
119 | signal.signal(signal.SIGCHLD, oldchldhandler) |
|
|||
120 | killworkers() |
|
122 | killworkers() | |
121 | def sigchldhandler(signum, frame): |
|
123 | def sigchldhandler(signum, frame): | |
122 | waitforworkers(blocking=False) |
|
124 | waitforworkers(blocking=False) |
General Comments 0
You need to be logged in to leave comments.
Login now