summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/server
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-04 15:54:12 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-05 18:01:37 +0100
commit74feaddda3b7cd5b3ab18d2f25bf5ef9581c9c47 (patch)
tree0e5d4c72d97ba4c0669aaf8394439778ea5ed33e /bitbake/lib/bb/server
parentb7e26bedc2952e4ac0edface4bd20be22d7708cd (diff)
downloadpoky-74feaddda3b7cd5b3ab18d2f25bf5ef9581c9c47.tar.gz
bitbake: server/process: Various server startup logging fixes
There were various problems in the server startup loggin: a) stdout/stderr were not being flushed before forking which could potentially duplicate output b) there were separate buffers for stdout/stderr leading to confusing logs where the entries could be reordered. This was particularly confusing due to the separator the logs use to idendify new messages c) an fd wasn't being closed during server startup meaning if the server failed to start, the closed fd wasn't detected as it was held open by the other reference d) If the pipe was detected as being closed, the code incorrectly retried server startup e) The event code would remap stdout/stderr without flushing them, leading to lose log messages (Bitbake rev: 0594faa0b52ce5dbd948d836d88617d38d9862d1) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/server')
-rw-r--r--bitbake/lib/bb/server/process.py20
1 files changed, 10 insertions, 10 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 9e5e709f04..38b923fe2d 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -395,11 +395,16 @@ class BitBakeServer(object):
395 bb.daemonize.createDaemon(self._startServer, logfile) 395 bb.daemonize.createDaemon(self._startServer, logfile)
396 self.sock.close() 396 self.sock.close()
397 self.bitbake_lock.close() 397 self.bitbake_lock.close()
398 os.close(self.readypipein)
398 399
399 ready = ConnectionReader(self.readypipe) 400 ready = ConnectionReader(self.readypipe)
400 r = ready.poll(30) 401 r = ready.poll(30)
401 if r: 402 if r:
402 r = ready.get() 403 try:
404 r = ready.get()
405 except EOFError:
406 # Trap the child exitting/closing the pipe and error out
407 r = None
403 if not r or r != "ready": 408 if not r or r != "ready":
404 ready.close() 409 ready.close()
405 bb.error("Unable to start bitbake server") 410 bb.error("Unable to start bitbake server")
@@ -425,21 +430,16 @@ class BitBakeServer(object):
425 bb.error("Server log for this session (%s):\n%s" % (logfile, "".join(lines))) 430 bb.error("Server log for this session (%s):\n%s" % (logfile, "".join(lines)))
426 raise SystemExit(1) 431 raise SystemExit(1)
427 ready.close() 432 ready.close()
428 os.close(self.readypipein)
429 433
430 def _startServer(self): 434 def _startServer(self):
431 print(self.start_log_format % (os.getpid(), datetime.datetime.now().strftime(self.start_log_datetime_format))) 435 print(self.start_log_format % (os.getpid(), datetime.datetime.now().strftime(self.start_log_datetime_format)))
432 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) 436 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
433 self.configuration.setServerRegIdleCallback(server.register_idle_function) 437 self.configuration.setServerRegIdleCallback(server.register_idle_function)
438 os.close(self.readypipe)
434 writer = ConnectionWriter(self.readypipein) 439 writer = ConnectionWriter(self.readypipein)
435 try: 440 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
436 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) 441 writer.send("ready")
437 writer.send("ready") 442 writer.close()
438 except:
439 writer.send("fail")
440 raise
441 finally:
442 os.close(self.readypipein)
443 server.cooker = self.cooker 443 server.cooker = self.cooker
444 server.server_timeout = self.configuration.server_timeout 444 server.server_timeout = self.configuration.server_timeout
445 server.xmlrpcinterface = self.configuration.xmlrpcinterface 445 server.xmlrpcinterface = self.configuration.xmlrpcinterface