diff options
Diffstat (limited to 'lib/bb/server/process.py')
-rw-r--r-- | lib/bb/server/process.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py index 84f3a7541..4bfff45f0 100644 --- a/lib/bb/server/process.py +++ b/lib/bb/server/process.py @@ -38,14 +38,18 @@ from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer logger = logging.getLogger('BitBake') class ServerCommunicator(): - def __init__(self, connection, event_handle): + def __init__(self, connection, event_handle, server): self.connection = connection self.event_handle = event_handle + self.server = server def runCommand(self, command): # @todo try/except self.connection.send(command) + if not self.server.is_alive(): + raise SystemExit + while True: # don't let the user ctrl-c while we're waiting for a response try: @@ -160,7 +164,7 @@ class BitBakeProcessServerConnection(BitBakeBaseServerConnection): self.procserver = serverImpl self.ui_channel = ui_channel self.event_queue = event_queue - self.connection = ServerCommunicator(self.ui_channel, self.procserver.event_handle) + self.connection = ServerCommunicator(self.ui_channel, self.procserver.event_handle, self.procserver) self.events = self.event_queue def sigterm_terminate(self): @@ -199,14 +203,20 @@ class ProcessEventQueue(multiprocessing.queues.Queue): def waitEvent(self, timeout): if self.exit: - raise KeyboardInterrupt() + raise SystemExit try: + if not self.server.is_alive(): + self.setexit() + return None return self.get(True, timeout) except Empty: return None def getEvent(self): try: + if not self.server.is_alive(): + self.setexit() + return None return self.get(False) except Empty: return None @@ -221,6 +231,7 @@ class BitBakeServer(BitBakeBaseServer): self.ui_channel, self.server_channel = Pipe() self.event_queue = ProcessEventQueue(0) self.serverImpl = ProcessServer(self.server_channel, self.event_queue, None) + self.event_queue.server = self.serverImpl def detach(self): self.serverImpl.start() |