bitbake: runqueue.py: Gracefully handle a missing worker process

If the worker has already gone missing (e.g. SIGTERM), we should
gracefully handle the write failures at exit time rather than throwing
ugly tracebacks.

(Bitbake rev: 1b1672e1ceff17fc4ff8eb7aa46f59fce3593873)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2014-03-09 10:01:19 -07:00
parent bb335f96ba
commit b28f00718c
1 changed files with 14 additions and 7 deletions

View File

@ -900,8 +900,11 @@ class RunQueue:
if not worker:
return
logger.debug(1, "Teardown for bitbake-worker")
worker.stdin.write("<quit></quit>")
worker.stdin.flush()
try:
worker.stdin.write("<quit></quit>")
worker.stdin.flush()
except IOError:
pass
while worker.returncode is None:
workerpipe.read()
worker.poll()
@ -1275,11 +1278,15 @@ class RunQueueExecute:
def finish_now(self):
self.rq.worker.stdin.write("<finishnow></finishnow>")
self.rq.worker.stdin.flush()
if self.rq.fakeworker:
self.rq.fakeworker.stdin.write("<finishnow></finishnow>")
self.rq.fakeworker.stdin.flush()
for worker in [self.rq.worker, self.rq.fakeworker]:
if not worker:
continue
try:
worker.stdin.write("<finishnow></finishnow>")
worker.stdin.flush()
except IOError:
# worker must have died?
pass
if len(self.failed_fnids) != 0:
self.rq.state = runQueueFailed