comparison mercurial/worker.py @ 31119:13bbcd56c57a

merge with stable
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 28 Feb 2017 11:13:25 -0800
parents 48dea083f66d a91c62752d08
children 9d3d56aa1a9f
comparison
equal deleted inserted replaced
31116:6483e49204ee 31119:13bbcd56c57a
118 # updated (maybe interrupted just after waitpid) 118 # updated (maybe interrupted just after waitpid)
119 pids.discard(pid) 119 pids.discard(pid)
120 break 120 break
121 else: 121 else:
122 raise 122 raise
123 if p: 123 if not p:
124 pids.discard(p) 124 # skip subsequent steps, because child process should
125 st = _exitstatus(st) 125 # be still running in this case
126 continue
127 pids.discard(p)
128 st = _exitstatus(st)
126 if st and not problem[0]: 129 if st and not problem[0]:
127 problem[0] = st 130 problem[0] = st
128 def sigchldhandler(signum, frame): 131 def sigchldhandler(signum, frame):
129 waitforworkers(blocking=False) 132 waitforworkers(blocking=False)
130 if problem[0]: 133 if problem[0]:
143 146
144 # make sure we use os._exit in all code paths. otherwise the worker 147 # make sure we use os._exit in all code paths. otherwise the worker
145 # may do some clean-ups which could cause surprises like deadlock. 148 # may do some clean-ups which could cause surprises like deadlock.
146 # see sshpeer.cleanup for example. 149 # see sshpeer.cleanup for example.
147 try: 150 try:
148 scmutil.callcatch(ui, workerfunc) 151 try:
152 scmutil.callcatch(ui, workerfunc)
153 finally:
154 ui.flush()
149 except KeyboardInterrupt: 155 except KeyboardInterrupt:
150 os._exit(255) 156 os._exit(255)
151 except: # never return, therefore no re-raises 157 except: # never return, therefore no re-raises
152 try: 158 try:
153 ui.traceback() 159 ui.traceback()
160 ui.flush()
154 finally: 161 finally:
155 os._exit(255) 162 os._exit(255)
156 else: 163 else:
157 os._exit(0) 164 os._exit(0)
158 pids.add(pid) 165 pids.add(pid)