diff -r d1bda397df73 -r 41f0529b5112 mercurial/commandserver.py --- a/mercurial/commandserver.py Mon Dec 03 21:31:19 2018 +0900 +++ b/mercurial/commandserver.py Mon Dec 03 21:45:15 2018 +0900 @@ -472,7 +472,15 @@ # waiting for recv() will receive ECONNRESET. self._unlinksocket() exiting = True - ready = selector.select(timeout=h.pollinterval) + try: + ready = selector.select(timeout=h.pollinterval) + except OSError as inst: + # selectors2 raises ETIMEDOUT if timeout exceeded while + # handling signal interrupt. That's probably wrong, but + # we can easily get around it. + if inst.errno != errno.ETIMEDOUT: + raise + ready = [] if not ready: # only exit if we completed all queued requests if exiting: