From: Richard Purdie Date: Sun, 9 Mar 2014 17:01:19 +0000 (-0700) Subject: bitbake: runqueue.py: Gracefully handle a missing worker process X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b28f00718ca9e4fd9f7c04c1cbfcdb9e4a411efd;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git 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 --- diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 967e944963c..7d3e91a743a 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py @@ -900,8 +900,11 @@ class RunQueue: if not worker: return logger.debug(1, "Teardown for bitbake-worker") - worker.stdin.write("") - worker.stdin.flush() + try: + worker.stdin.write("") + 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("") - self.rq.worker.stdin.flush() - if self.rq.fakeworker: - self.rq.fakeworker.stdin.write("") - self.rq.fakeworker.stdin.flush() + for worker in [self.rq.worker, self.rq.fakeworker]: + if not worker: + continue + try: + worker.stdin.write("") + worker.stdin.flush() + except IOError: + # worker must have died? + pass if len(self.failed_fnids) != 0: self.rq.state = runQueueFailed