diff options
-rw-r--r-- | bitbake/lib/bb/cooker.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/server/process.py | 20 |
2 files changed, 23 insertions, 3 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index d6e6919506..1a5e0038b6 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): + 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/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index fb96804e68..6106c07380 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/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 |