worker: do not swallow exception occurred in main process
Before, SystemExit(255) would be most likely raised since the worker processes
were terminated by the main process and the status would be set to 255 in
response. We should instead re-raise the exception occurred first. It's pretty
hard to debug problems like the issue 6035 with no traceback.
--- a/mercurial/worker.py Mon Dec 17 20:46:09 2018 +0900
+++ b/mercurial/worker.py Tue Dec 11 22:34:07 2018 +0900
@@ -213,11 +213,7 @@
waitforworkers()
signal.signal(signal.SIGCHLD, oldchldhandler)
selector.close()
- status = problem[0]
- if status:
- if status < 0:
- os.kill(os.getpid(), -status)
- sys.exit(status)
+ return problem[0]
try:
openpipes = len(pipes)
while openpipes > 0:
@@ -236,7 +232,11 @@
killworkers()
cleanup()
raise
- cleanup()
+ status = cleanup()
+ if status:
+ if status < 0:
+ os.kill(os.getpid(), -status)
+ sys.exit(status)
def _posixexitstatus(code):
'''convert a posix exit status into the same form returned by