From def28239b0f0d5f1cf13214b263114a5328538b7 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Sun, 9 Mar 2014 17:58:02 -0700 Subject: [PATCH] server/process: Use a pipe for quit events instead of Event() Its not possible to notice the change of status of an Event() in the select call we sleep in. It would be possible in python 3.3 but for now use a pipe instead. This removes small latency when bitbake commands finish since the system doesn't sit in the select call. (Debugging these kind of issues is apparent by setting a long sleep for the select call) Signed-off-by: Richard Purdie --- lib/bb/server/process.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py index f4cb32c8aa7..386294f5805 100644 --- a/lib/bb/server/process.py +++ b/lib/bb/server/process.py @@ -87,8 +87,7 @@ class ProcessServer(Process, BaseImplServer): self.featurelist = featurelist self.quit = False - self.keep_running = Event() - self.keep_running.set() + self.quitin, self.quitout = Pipe() self.event_handle = multiprocessing.Value("i") def run(self): @@ -101,14 +100,18 @@ class ProcessServer(Process, BaseImplServer): def main(self): # Ignore SIGINT within the server, as all SIGINT handling is done by # the UI and communicated to us + self.quitin.close() signal.signal(signal.SIGINT, signal.SIG_IGN) - while self.keep_running.is_set(): + while not self.quit: try: if self.command_channel.poll(): command = self.command_channel.recv() self.runCommand(command) + if self.quitout.poll(): + self.quitout.recv() + self.quit = True - self.idle_commands(.1, [self.event_queue._reader, self.command_channel]) + self.idle_commands(.1, [self.event_queue._reader, self.command_channel, self.quitout]) except Exception: logger.exception('Running command %s', command) @@ -147,7 +150,8 @@ class ProcessServer(Process, BaseImplServer): self.command_channel.send(self.cooker.command.runCommand(command)) def stop(self): - self.keep_running.clear() + self.quitin.send("quit") + self.quitin.close() class BitBakeProcessServerConnection(BitBakeBaseServerConnection): def __init__(self, serverImpl, ui_channel, event_queue): -- 2.47.3