summaryrefslogtreecommitdiffstats
path: root/lib/bb/runqueue.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bb/runqueue.py')
-rw-r--r--lib/bb/runqueue.py28
1 files changed, 14 insertions, 14 deletions
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index b71e1d0fc..fa7a99fba 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -914,32 +914,32 @@ class RunQueue:
workerpipe.close()
def sigchild_exception(self, *args, **kwargs):
- for w in [self.worker, self.fakeworker]:
- if not w:
- continue
+ pid = -1
+ while pid:
try:
- pid, status = os.waitpid(w.pid, os.WNOHANG)
+ pid, status = os.waitpid(-1, os.WNOHANG)
if pid != 0 and not self.teardown:
+ name = None
if self.worker and pid == self.worker.pid:
name = "Worker"
elif self.fakeworker and pid == self.fakeworker.pid:
name = "Fakeroot"
else:
- name = "Unknown"
- bb.error("%s process (%s) exited unexpectedly (%s), shutting down..." % (name, pid, str(status)))
- self.finish_runqueue(True)
+ bb.warn("Unknown process (%s) exited unexpectedly (%s), shutting down..." % (pid, str(status)))
+ if name and not self.teardown:
+ bb.error("%s process (%s) exited unexpectedly (%s), shutting down..." % (name, pid, str(status)))
+ self.finish_runqueue(True)
except OSError:
- pid = False
- if callable(self.oldsigchld) and self.oldsigchld != self.sigchild_exception:
- self.oldsigchld(*args, **kwargs)
+ return
def start_worker(self):
if self.worker:
self.teardown_workers()
self.teardown = False
- if not self.oldsigchld:
- self.oldsigchld = signal.getsignal(signal.SIGCHLD)
- signal.signal(signal.SIGCHLD, self.sigchild_exception)
+ if self.oldsigchld is None:
+ self.oldsigchld = signal.signal(signal.SIGCHLD, self.sigchild_exception)
+ if self.oldsigchld is None:
+ self.oldsigchld = signal.SIG_DFL
self.worker, self.workerpipe = self._start_worker()
def start_fakeworker(self, rqexec):
@@ -948,7 +948,7 @@ class RunQueue:
def teardown_workers(self):
self.teardown = True
- if self.oldsigchld:
+ if self.oldsigchld is not None:
signal.signal(signal.SIGCHLD, self.oldsigchld)
self.oldsigchld = None
self._teardown_worker(self.worker, self.workerpipe)