bitbake: cooker: Improve hash server startup code to avoid exit tracebacks

At exit the hashserv code was causing tracebacks as join() wasn't
being called from the thread that started the process. Ensure that
the hashserver is started from the pre_serve hook which is the
final thread the cooker runs in. This avoids the traceback at the
expense of some horrific poking into data stores which will ultimately
need improving through a proper API.

(Bitbake rev: 05888700e5f6cba48a26c8a4c447634a28e3baa6)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2019-08-12 15:56:20 +01:00
parent abda938d66
commit 5f5bc81b3e
2 changed files with 18 additions and 12 deletions

View File

@@ -371,22 +371,10 @@ class BBCooker:
self.data.setVar('BB_CMDLINE', self.ui_cmdline)
if self.data.getVar("BB_HASHSERVE") == "localhost:0":
if not self.hashserv:
dbfile = (self.data.getVar("PERSISTENT_DIR") or self.data.getVar("CACHE")) + "/hashserv.db"
self.hashserv = hashserv.create_server(('localhost', 0), dbfile, '')
self.hashservport = "localhost:" + str(self.hashserv.server_port)
self.hashserv.process = multiprocessing.Process(target=self.hashserv.serve_forever)
self.hashserv.process.daemon = True
self.hashserv.process.start()
self.data.setVar("BB_HASHSERVE", self.hashservport)
#
# Copy of the data store which has been expanded.
# Used for firing events and accessing variables where expansion needs to be accounted for
#
bb.parse.init_parser(self.data)
if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset:
self.disableDataTracking()
@@ -404,6 +392,22 @@ class BBCooker:
except prserv.serv.PRServiceConfigError as e:
bb.fatal("Unable to start PR Server, exitting")
if self.data.getVar("BB_HASHSERVE") == "localhost:0":
if not self.hashserv:
dbfile = (self.data.getVar("PERSISTENT_DIR") or self.data.getVar("CACHE")) + "/hashserv.db"
self.hashserv = hashserv.create_server(('localhost', 0), dbfile, '')
self.hashservport = "localhost:" + str(self.hashserv.server_port)
self.hashserv.process = multiprocessing.Process(target=self.hashserv.serve_forever)
self.hashserv.process.daemon = True
self.hashserv.process.start()
self.data.setVar("BB_HASHSERVE", self.hashservport)
self.databuilder.origdata.setVar("BB_HASHSERVE", self.hashservport)
self.databuilder.data.setVar("BB_HASHSERVE", self.hashservport)
for mc in self.databuilder.mcdata:
self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.hashservport)
bb.parse.init_parser(self.data)
def enableDataTracking(self):
self.configuration.tracking = True
if hasattr(self, "data"):
@@ -1677,6 +1681,7 @@ class BBCooker:
def reset(self):
self.initConfigurationData()
self.handlePRServ()
def clientComplete(self):
"""Called when the client is done using the server"""

View File

@@ -151,6 +151,7 @@ class ThreadedHTTPServer(HTTPServer):
signal.signal(signal.SIGTERM, self.sigterm_exception)
super().serve_forever()
os._exit(0)
def sigterm_exception(self, signum, stackframe):
self.server_close()