bitbake: runqueue: More carefully handle the sigchld handler

We've noticed hanging processes which appear to be looping around
waitpid. Its possible multiple calls to teardown are causing problem
or in theory multiple registrations (although the code should not
allow that). Regardless, put better guards around signal handler
registration.

(Bitbake rev: 79acfb0853aa3215215cee89a945f8e97b0a8fae)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2014-03-18 10:21:34 +00:00
parent 1f16ca9fba
commit 6bbb179cc5
1 changed files with 4 additions and 2 deletions

View File

@ -937,8 +937,9 @@ class RunQueue:
if self.worker:
self.teardown_workers()
self.teardown = False
self.oldsigchld = signal.getsignal(signal.SIGCHLD)
signal.signal(signal.SIGCHLD, self.sigchild_exception)
if not self.oldsigchld:
self.oldsigchld = signal.getsignal(signal.SIGCHLD)
signal.signal(signal.SIGCHLD, self.sigchild_exception)
self.worker, self.workerpipe = self._start_worker()
def start_fakeworker(self, rqexec):
@ -949,6 +950,7 @@ class RunQueue:
self.teardown = True
if self.oldsigchld:
signal.signal(signal.SIGCHLD, self.oldsigchld)
self.oldsigchld = None
self._teardown_worker(self.worker, self.workerpipe)
self.worker = None
self.workerpipe = None