summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-11 23:17:43 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-12 23:55:29 +0100
commit28949d3f80de33c1c034d877691308c301e50bbd (patch)
treed22819403228e154241a1ea8ae48d842a21c476a /bitbake
parent74afde0058e5ca6f27e645013e8a71ce297b23be (diff)
downloadpoky-28949d3f80de33c1c034d877691308c301e50bbd.tar.gz
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>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cooker.py6
-rw-r--r--bitbake/lib/bb/server/process.py17
2 files changed, 14 insertions, 9 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 7d040dcd88..8fe36eba1e 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, readypipe=None): 168 def __init__(self, configuration, featureSet=None):
169 self.recipecaches = None 169 self.recipecaches = None
170 self.skiplist = {} 170 self.skiplist = {}
171 self.featureset = CookerFeatures() 171 self.featureset = CookerFeatures()
@@ -233,10 +233,6 @@ class BBCooker:
233 # Let SIGHUP exit as SIGTERM 233 # Let SIGHUP exit as SIGTERM
234 signal.signal(signal.SIGHUP, self.sigterm_exception) 234 signal.signal(signal.SIGHUP, self.sigterm_exception)
235 235
236 if readypipe:
237 os.write(readypipe, b"ready")
238 os.close(readypipe)
239
240 def process_inotify_updates(self): 236 def process_inotify_updates(self):
241 for n in [self.confignotifier, self.notifier]: 237 for n in [self.confignotifier, self.notifier]:
242 if n.check_events(timeout=0): 238 if n.check_events(timeout=0):
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 5c7dfaefa1..6a12f01057 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -388,8 +388,10 @@ class BitBakeServer(object):
388 self.bitbake_lock.close() 388 self.bitbake_lock.close()
389 389
390 ready = ConnectionReader(self.readypipe) 390 ready = ConnectionReader(self.readypipe)
391 r = ready.wait(30) 391 r = ready.poll(30)
392 if not r: 392 if r:
393 r = ready.get()
394 if not r or r != "ready":
393 ready.close() 395 ready.close()
394 bb.error("Unable to start bitbake server") 396 bb.error("Unable to start bitbake server")
395 if os.path.exists(logfile): 397 if os.path.exists(logfile):
@@ -404,8 +406,15 @@ class BitBakeServer(object):
404 print("Starting bitbake server pid %d" % os.getpid()) 406 print("Starting bitbake server pid %d" % os.getpid())
405 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname) 407 server = ProcessServer(self.bitbake_lock, self.sock, self.sockname)
406 self.configuration.setServerRegIdleCallback(server.register_idle_function) 408 self.configuration.setServerRegIdleCallback(server.register_idle_function)
407 409 writer = ConnectionWriter(self.readypipein)
408 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset, self.readypipein) 410 try:
411 self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
412 writer.send("ready")
413 except:
414 writer.send("fail")
415 raise
416 finally:
417 os.close(self.readypipein)
409 server.cooker = self.cooker 418 server.cooker = self.cooker
410 server.server_timeout = self.configuration.server_timeout 419 server.server_timeout = self.configuration.server_timeout
411 server.xmlrpcinterface = self.configuration.xmlrpcinterface 420 server.xmlrpcinterface = self.configuration.xmlrpcinterface