comparison mercurial/worker.py @ 49310:ee4537e365c8

py3: remove retry on EINTR errno Since the implementation of PEP 475 (Python 3.5), Python retries system calls failing with EINTR. Therefore we don?t need the logic that retries it in Python code.
author Manuel Jacob <me@manueljacob.de>
date Tue, 31 May 2022 04:11:34 +0200
parents 311fcc5a65f6
children dfdf85f37215
comparison
equal deleted inserted replaced
49309:c463f45fa114 49310:ee4537e365c8
182 raise 182 raise
183 183
184 def waitforworkers(blocking=True): 184 def waitforworkers(blocking=True):
185 for pid in pids.copy(): 185 for pid in pids.copy():
186 p = st = 0 186 p = st = 0
187 while True: 187 try:
188 try: 188 p, st = os.waitpid(pid, (0 if blocking else os.WNOHANG))
189 p, st = os.waitpid(pid, (0 if blocking else os.WNOHANG)) 189 except OSError as e:
190 break 190 if e.errno == errno.ECHILD:
191 except OSError as e: 191 # child would already be reaped, but pids yet been
192 if e.errno == errno.EINTR: 192 # updated (maybe interrupted just after waitpid)
193 continue 193 pids.discard(pid)
194 elif e.errno == errno.ECHILD: 194 else:
195 # child would already be reaped, but pids yet been 195 raise
196 # updated (maybe interrupted just after waitpid)
197 pids.discard(pid)
198 break
199 else:
200 raise
201 if not p: 196 if not p:
202 # skip subsequent steps, because child process should 197 # skip subsequent steps, because child process should
203 # be still running in this case 198 # be still running in this case
204 continue 199 continue
205 pids.discard(p) 200 pids.discard(p)
300 selector.unregister(key.fileobj) 295 selector.unregister(key.fileobj)
301 # pytype: disable=attribute-error 296 # pytype: disable=attribute-error
302 key.fileobj.close() 297 key.fileobj.close()
303 # pytype: enable=attribute-error 298 # pytype: enable=attribute-error
304 openpipes -= 1 299 openpipes -= 1
305 except IOError as e:
306 if e.errno == errno.EINTR:
307 continue
308 raise
309 except: # re-raises 300 except: # re-raises
310 killworkers() 301 killworkers()
311 cleanup() 302 cleanup()
312 raise 303 raise
313 status = cleanup() 304 status = cleanup()