equal
deleted
inserted
replaced
87 rfd, wfd = os.pipe() |
87 rfd, wfd = os.pipe() |
88 workers = _numworkers(ui) |
88 workers = _numworkers(ui) |
89 oldhandler = signal.getsignal(signal.SIGINT) |
89 oldhandler = signal.getsignal(signal.SIGINT) |
90 signal.signal(signal.SIGINT, signal.SIG_IGN) |
90 signal.signal(signal.SIGINT, signal.SIG_IGN) |
91 pids, problem = [], [0] |
91 pids, problem = [], [0] |
|
92 def killworkers(): |
|
93 # if one worker bails, there's no good reason to wait for the rest |
|
94 for p in pids: |
|
95 try: |
|
96 os.kill(p, signal.SIGTERM) |
|
97 except OSError as err: |
|
98 if err.errno != errno.ESRCH: |
|
99 raise |
|
100 def waitforworkers(): |
|
101 for _pid in pids: |
|
102 st = _exitstatus(os.wait()[1]) |
|
103 if st and not problem[0]: |
|
104 problem[0] = st |
|
105 killworkers() |
92 for pargs in partition(args, workers): |
106 for pargs in partition(args, workers): |
93 pid = os.fork() |
107 pid = os.fork() |
94 if pid == 0: |
108 if pid == 0: |
95 signal.signal(signal.SIGINT, oldhandler) |
109 signal.signal(signal.SIGINT, oldhandler) |
96 try: |
110 try: |
104 # on lock.py's pid checks to avoid release callbacks |
118 # on lock.py's pid checks to avoid release callbacks |
105 pids.append(pid) |
119 pids.append(pid) |
106 pids.reverse() |
120 pids.reverse() |
107 os.close(wfd) |
121 os.close(wfd) |
108 fp = os.fdopen(rfd, 'rb', 0) |
122 fp = os.fdopen(rfd, 'rb', 0) |
109 def killworkers(): |
|
110 # if one worker bails, there's no good reason to wait for the rest |
|
111 for p in pids: |
|
112 try: |
|
113 os.kill(p, signal.SIGTERM) |
|
114 except OSError as err: |
|
115 if err.errno != errno.ESRCH: |
|
116 raise |
|
117 def waitforworkers(): |
|
118 for _pid in pids: |
|
119 st = _exitstatus(os.wait()[1]) |
|
120 if st and not problem[0]: |
|
121 problem[0] = st |
|
122 killworkers() |
|
123 t = threading.Thread(target=waitforworkers) |
123 t = threading.Thread(target=waitforworkers) |
124 t.start() |
124 t.start() |
125 def cleanup(): |
125 def cleanup(): |
126 signal.signal(signal.SIGINT, oldhandler) |
126 signal.signal(signal.SIGINT, oldhandler) |
127 t.join() |
127 t.join() |