From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dan.rpsys.net (dan.rpsys.net [93.97.175.187]) by mail.openembedded.org (Postfix) with ESMTP id DC96C6F60F for ; Sun, 9 Mar 2014 17:01:37 +0000 (UTC) Received: from localhost (dan.rpsys.net [127.0.0.1]) by dan.rpsys.net (8.14.4/8.14.4/Debian-2.1ubuntu4) with ESMTP id s29H1XQ8020215 for ; Sun, 9 Mar 2014 17:01:33 GMT X-Virus-Scanned: Debian amavisd-new at dan.rpsys.net Received: from dan.rpsys.net ([127.0.0.1]) by localhost (dan.rpsys.net [127.0.0.1]) (amavisd-new, port 10024) with LMTP id BAkXN2Ip2o4H for ; Sun, 9 Mar 2014 17:01:33 +0000 (GMT) Received: from [192.168.3.10] (rpvlan0 [192.168.3.10]) (authenticated bits=0) by dan.rpsys.net (8.14.4/8.14.4/Debian-2.1ubuntu1) with ESMTP id s29H1OMv020200 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT) for ; Sun, 9 Mar 2014 17:01:29 GMT Message-ID: <1394384479.7883.8.camel@ted> From: Richard Purdie To: bitbake-devel Date: Sun, 09 Mar 2014 10:01:19 -0700 X-Mailer: Evolution 3.8.4-0ubuntu1 Mime-Version: 1.0 Subject: runqueue.py: Gracefully handle a missing worker process X-BeenThere: bitbake-devel@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussion that advance bitbake development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Mar 2014 17:01:38 -0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit 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. Signed-off-by: Richard Purdie --- diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 967e944..7d3e91a 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