Skip to contentSkip to conversation

server/process: Use the setFeatures command on the server instead of a manger

PATCH New Richard Purdie 1 participant 1 message Mar 9, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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/lib/bb/server/process.py +8 -13
index aa07202..6db6a23 100644
@@ -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