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: | |||
| 165 | Manages one bitbake build run | 165 | Manages one bitbake build run |
| 166 | """ | 166 | """ |
| 167 | 167 | ||
| 168 | def __init__(self, configuration, featureSet=None): | 168 | def __init__(self, configuration, featureSet=None, readypipe=None): |
| 169 | self.recipecaches = None | 169 | self.recipecaches = None |
| 170 | self.skiplist = {} | 170 | self.skiplist = {} |
| 171 | self.featureset = CookerFeatures() | 171 | self.featureset = CookerFeatures() |
| @@ -237,6 +237,10 @@ class BBCooker: | |||
| 237 | # Let SIGHUP exit as SIGTERM | 237 | # Let SIGHUP exit as SIGTERM |
| 238 | signal.signal(signal.SIGHUP, self.sigterm_exception) | 238 | signal.signal(signal.SIGHUP, self.sigterm_exception) |
| 239 | 239 | ||
| 240 | if readypipe: | ||
| 241 | os.write(readypipe, b"ready") | ||
| 242 | os.close(readypipe) | ||
| 243 | |||
| 240 | def config_notifications(self, event): | 244 | def config_notifications(self, event): |
| 241 | if event.maskname == "IN_Q_OVERFLOW": | 245 | if event.maskname == "IN_Q_OVERFLOW": |
| 242 | bb.warn("inotify event queue overflowed, invalidating caches.") | 246 | 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): | |||
| 355 | self.featureset = featureset | 355 | self.featureset = featureset |
| 356 | self.sockname = sockname | 356 | self.sockname = sockname |
| 357 | self.bitbake_lock = lock | 357 | self.bitbake_lock = lock |
| 358 | self.readypipe, self.readypipein = os.pipe() | ||
| 358 | 359 | ||
| 359 | # Create server control socket | 360 | # Create server control socket |
| 360 | if os.path.exists(sockname): | 361 | if os.path.exists(sockname): |
| @@ -363,6 +364,8 @@ class BitBakeServer(object): | |||
| 363 | self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) | 364 | self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) |
| 364 | # AF_UNIX has path length issues so chdir here to workaround | 365 | # AF_UNIX has path length issues so chdir here to workaround |
| 365 | cwd = os.getcwd() | 366 | cwd = os.getcwd() |
| 367 | logfile = os.path.join(cwd, "bitbake-cookerdaemon.log") | ||
| 368 | |||
| 366 | try: | 369 | try: |
| 367 | os.chdir(os.path.dirname(sockname)) | 370 | os.chdir(os.path.dirname(sockname)) |
| 368 | self.sock.bind(os.path.basename(sockname)) | 371 | self.sock.bind(os.path.basename(sockname)) |
| @@ -371,10 +374,23 @@ class BitBakeServer(object): | |||
| 371 | self.sock.listen(1) | 374 | self.sock.listen(1) |
| 372 | 375 | ||
| 373 | os.set_inheritable(self.sock.fileno(), True) | 376 | os.set_inheritable(self.sock.fileno(), True) |
| 374 | bb.daemonize.createDaemon(self._startServer, "bitbake-cookerdaemon.log") | 377 | bb.daemonize.createDaemon(self._startServer, logfile) |
| 375 | self.sock.close() | 378 | self.sock.close() |
| 376 | self.bitbake_lock.close() | 379 | self.bitbake_lock.close() |
| 377 | 380 | ||
| 381 | ready = ConnectionReader(self.readypipe) | ||
| 382 | r = ready.wait(8) | ||
| 383 | if not r: | ||
| 384 | ready.close() | ||
| 385 | bb.error("Unable to start bitbake server") | ||
| 386 | if os.path.exists(logfile): | ||
| 387 | with open(logfile, "r") as f: | ||
| 388 | logs=f.readlines() | ||
| 389 | bb.error("Last 10 lines of server log %s:\n%s" % (logfile, "".join(logs[-10:]))) | ||
| 390 | raise SystemExit(1) | ||
| 391 | ready.close() | ||
| 392 | os.close(self.readypipein) | ||
| 393 | |||
| 378 | def _startServer(self): | 394 | def _startServer(self): |
| 379 | server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) | 395 | server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) |
| 380 | self.configuration.setServerRegIdleCallback(server.register_idle_function) | 396 | self.configuration.setServerRegIdleCallback(server.register_idle_function) |
| @@ -385,7 +401,7 @@ class BitBakeServer(object): | |||
| 385 | if value: | 401 | if value: |
| 386 | setattr(self.configuration, "%s_server" % param, value) | 402 | setattr(self.configuration, "%s_server" % param, value) |
| 387 | 403 | ||
| 388 | self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) | 404 | self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset, self.readypipein) |
| 389 | server.cooker = self.cooker | 405 | server.cooker = self.cooker |
| 390 | server.server_timeout = self.configuration.server_timeout | 406 | server.server_timeout = self.configuration.server_timeout |
| 391 | server.xmlrpcinterface = self.configuration.xmlrpcinterface | 407 | server.xmlrpcinterface = self.configuration.xmlrpcinterface |
