[gnome-continuous-yocto/gnomeostree-3.28-rocko: 7677/8267] bitbake: process/cooker: Improve readypipe handling
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-continuous-yocto/gnomeostree-3.28-rocko: 7677/8267] bitbake: process/cooker: Improve readypipe handling
- Date: Sun, 17 Dec 2017 06:35:02 +0000 (UTC)
commit 28949d3f80de33c1c034d877691308c301e50bbd
Author: Richard Purdie <richard purdie linuxfoundation org>
Date: Mon Sep 11 23:17:43 2017 +0100
bitbake: process/cooker: Improve readypipe handling
Issues in start are not being correctly detected by the current readypipe
code. Change it to use specific "ready" or "fail" messages to correctly
determine the correct failure mode and avoid bitbake seeming to hang
(it does currently timeout eventually).
[YOCTO #12062]
(Bitbake rev: 60d4791e3dd05729d2a2adf6f3b203c80d466a73)
Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>
bitbake/lib/bb/cooker.py | 6 +-----
bitbake/lib/bb/server/process.py | 17 +++++++++++++----
2 files changed, 14 insertions(+), 9 deletions(-)
---
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 7d040dc..8fe36eb 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -165,7 +165,7 @@ class BBCooker:
Manages one bitbake build run
"""
- def __init__(self, configuration, featureSet=None, readypipe=None):
+ def __init__(self, configuration, featureSet=None):
self.recipecaches = None
self.skiplist = {}
self.featureset = CookerFeatures()
@@ -233,10 +233,6 @@ class BBCooker:
# Let SIGHUP exit as SIGTERM
signal.signal(signal.SIGHUP, self.sigterm_exception)
- if readypipe:
- os.write(readypipe, b"ready")
- os.close(readypipe)
-
def process_inotify_updates(self):
for n in [self.confignotifier, self.notifier]:
if n.check_events(timeout=0):
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 5c7dfae..6a12f01 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -388,8 +388,10 @@ class BitBakeServer(object):
self.bitbake_lock.close()
ready = ConnectionReader(self.readypipe)
- r = ready.wait(30)
- if not r:
+ r = ready.poll(30)
+ if r:
+ r = ready.get()
+ if not r or r != "ready":
ready.close()
bb.error("Unable to start bitbake server")
if os.path.exists(logfile):
@@ -404,8 +406,15 @@ class BitBakeServer(object):
print("Starting bitbake server pid %d" % os.getpid())
server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
self.configuration.setServerRegIdleCallback(server.register_idle_function)
-
- self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset, self.readypipein)
+ writer = ConnectionWriter(self.readypipein)
+ try:
+ self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
+ writer.send("ready")
+ except:
+ writer.send("fail")
+ raise
+ finally:
+ os.close(self.readypipein)
server.cooker = self.cooker
server.server_timeout = self.configuration.server_timeout
server.xmlrpcinterface = self.configuration.xmlrpcinterface
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]