aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/cooker.py6
-rw-r--r--lib/bb/server/process.py20
2 files changed, 23 insertions, 3 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index d6e691950..1a5e0038b 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -165,7 +165,7 @@ class BBCooker:
Manages one bitbake build run
"""
- def __init__(self, configuration, featureSet=None):
+ def __init__(self, configuration, featureSet=None, readypipe=None):
self.recipecaches = None
self.skiplist = {}
self.featureset = CookerFeatures()
@@ -237,6 +237,10 @@ 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 config_notifications(self, event):
if event.maskname == "IN_Q_OVERFLOW":
bb.warn("inotify event queue overflowed, invalidating caches.")
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py
index fb96804e6..6106c0738 100644
--- a/lib/bb/server/process.py
+++ b/lib/bb/server/process.py
@@ -355,6 +355,7 @@ class BitBakeServer(object):
self.featureset = featureset
self.sockname = sockname
self.bitbake_lock = lock
+ self.readypipe, self.readypipein = os.pipe()
# Create server control socket
if os.path.exists(sockname):
@@ -363,6 +364,8 @@ class BitBakeServer(object):
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# AF_UNIX has path length issues so chdir here to workaround
cwd = os.getcwd()
+ logfile = os.path.join(cwd, "bitbake-cookerdaemon.log")
+
try:
os.chdir(os.path.dirname(sockname))
self.sock.bind(os.path.basename(sockname))
@@ -371,10 +374,23 @@ class BitBakeServer(object):
self.sock.listen(1)
os.set_inheritable(self.sock.fileno(), True)
- bb.daemonize.createDaemon(self._startServer, "bitbake-cookerdaemon.log")
+ bb.daemonize.createDaemon(self._startServer, logfile)
self.sock.close()
self.bitbake_lock.close()
+ ready = ConnectionReader(self.readypipe)
+ r = ready.wait(8)
+ if not r:
+ ready.close()
+ bb.error("Unable to start bitbake server")
+ if os.path.exists(logfile):
+ with open(logfile, "r") as f:
+ logs=f.readlines()
+ bb.error("Last 10 lines of server log %s:\n%s" % (logfile, "".join(logs[-10:])))
+ raise SystemExit(1)
+ ready.close()
+ os.close(self.readypipein)
+
def _startServer(self):
server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
self.configuration.setServerRegIdleCallback(server.register_idle_function)
@@ -385,7 +401,7 @@ class BitBakeServer(object):
if value:
setattr(self.configuration, "%s_server" % param, value)
- self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
+ self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset, self.readypipein)
server.cooker = self.cooker
server.server_timeout = self.configuration.server_timeout
server.xmlrpcinterface = self.configuration.xmlrpcinterface