Mercurial > public > mercurial-scm > hg-stable
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() |