From 8fbe21845c67a81e79039268717941312fbc7d30 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 9 Mar 2014 10:02:50 -0700 Subject: bitbake: server/process: Use the setFeatures command on the server instead of a manger The use of a manager in the process server causes some issues since it remains around for the lifetime of the server even though its only used during initialisation and the system doesn't respond well to SIGTERM events to the extra process (and two threads) the implementation involves. Switching to a dedicated command simplifies the server process structure. (Bitbake rev: 74532a7cf8ccea8b85f1cda5d5bc23d2f3c72a08) Signed-off-by: Richard Purdie --- bitbake/lib/bb/server/process.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'bitbake/lib/bb/server') diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index aa072020af..6db6a2326d 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py @@ -80,7 +80,7 @@ class ProcessServer(Process, BaseImplServer): def __init__(self, command_channel, event_queue, featurelist): BaseImplServer.__init__(self) - Process.__init__(self, args=(featurelist)) + Process.__init__(self) self.command_channel = command_channel self.event_queue = event_queue self.event = EventAdapter(event_queue) @@ -96,13 +96,6 @@ class ProcessServer(Process, BaseImplServer): self.event_queue.put(event) self.event_handle.value = bb.event.register_UIHhandler(self) - # process any feature changes based on what UI requested - original_featureset = list(self.cooker.featureset) - while len(self.featurelist)> 0: - self.cooker.featureset.setFeature(self.featurelist.pop()) - if (original_featureset != list(self.cooker.featureset)): - self.cooker.reset() - bb.cooker.server_main(self.cooker, self.main) def main(self): @@ -207,17 +200,19 @@ class BitBakeServer(BitBakeBaseServer): # self.ui_channel, self.server_channel = Pipe() self.event_queue = ProcessEventQueue(0) - manager = Manager() - self.featurelist = manager.list() - self.serverImpl = ProcessServer(self.server_channel, self.event_queue, self.featurelist) + self.serverImpl = ProcessServer(self.server_channel, self.event_queue, None) def detach(self): self.serverImpl.start() return def establishConnection(self, featureset): - for f in featureset: - self.featurelist.append(f) + self.connection = BitBakeProcessServerConnection(self.serverImpl, self.ui_channel, self.event_queue) + + _, error = self.connection.connection.runCommand(["setFeatures", featureset]) + if error: + logger.error("Unable to set the cooker to the correct featureset: %s" % error) + raise BaseException(error) signal.signal(signal.SIGTERM, lambda i, s: self.connection.terminate()) return self.connection -- cgit v1.2.3-54-g00ecf