diff options
-rw-r--r-- | bitbake/lib/bb/server/process.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index 84f3a75412..4bfff45f01 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py | |||
@@ -38,14 +38,18 @@ from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer | |||
38 | logger = logging.getLogger('BitBake') | 38 | logger = logging.getLogger('BitBake') |
39 | 39 | ||
40 | class ServerCommunicator(): | 40 | class ServerCommunicator(): |
41 | def __init__(self, connection, event_handle): | 41 | def __init__(self, connection, event_handle, server): |
42 | self.connection = connection | 42 | self.connection = connection |
43 | self.event_handle = event_handle | 43 | self.event_handle = event_handle |
44 | self.server = server | ||
44 | 45 | ||
45 | def runCommand(self, command): | 46 | def runCommand(self, command): |
46 | # @todo try/except | 47 | # @todo try/except |
47 | self.connection.send(command) | 48 | self.connection.send(command) |
48 | 49 | ||
50 | if not self.server.is_alive(): | ||
51 | raise SystemExit | ||
52 | |||
49 | while True: | 53 | while True: |
50 | # don't let the user ctrl-c while we're waiting for a response | 54 | # don't let the user ctrl-c while we're waiting for a response |
51 | try: | 55 | try: |
@@ -160,7 +164,7 @@ class BitBakeProcessServerConnection(BitBakeBaseServerConnection): | |||
160 | self.procserver = serverImpl | 164 | self.procserver = serverImpl |
161 | self.ui_channel = ui_channel | 165 | self.ui_channel = ui_channel |
162 | self.event_queue = event_queue | 166 | self.event_queue = event_queue |
163 | self.connection = ServerCommunicator(self.ui_channel, self.procserver.event_handle) | 167 | self.connection = ServerCommunicator(self.ui_channel, self.procserver.event_handle, self.procserver) |
164 | self.events = self.event_queue | 168 | self.events = self.event_queue |
165 | 169 | ||
166 | def sigterm_terminate(self): | 170 | def sigterm_terminate(self): |
@@ -199,14 +203,20 @@ class ProcessEventQueue(multiprocessing.queues.Queue): | |||
199 | 203 | ||
200 | def waitEvent(self, timeout): | 204 | def waitEvent(self, timeout): |
201 | if self.exit: | 205 | if self.exit: |
202 | raise KeyboardInterrupt() | 206 | raise SystemExit |
203 | try: | 207 | try: |
208 | if not self.server.is_alive(): | ||
209 | self.setexit() | ||
210 | return None | ||
204 | return self.get(True, timeout) | 211 | return self.get(True, timeout) |
205 | except Empty: | 212 | except Empty: |
206 | return None | 213 | return None |
207 | 214 | ||
208 | def getEvent(self): | 215 | def getEvent(self): |
209 | try: | 216 | try: |
217 | if not self.server.is_alive(): | ||
218 | self.setexit() | ||
219 | return None | ||
210 | return self.get(False) | 220 | return self.get(False) |
211 | except Empty: | 221 | except Empty: |
212 | return None | 222 | return None |
@@ -221,6 +231,7 @@ class BitBakeServer(BitBakeBaseServer): | |||
221 | self.ui_channel, self.server_channel = Pipe() | 231 | self.ui_channel, self.server_channel = Pipe() |
222 | self.event_queue = ProcessEventQueue(0) | 232 | self.event_queue = ProcessEventQueue(0) |
223 | self.serverImpl = ProcessServer(self.server_channel, self.event_queue, None) | 233 | self.serverImpl = ProcessServer(self.server_channel, self.event_queue, None) |
234 | self.event_queue.server = self.serverImpl | ||
224 | 235 | ||
225 | def detach(self): | 236 | def detach(self): |
226 | self.serverImpl.start() | 237 | self.serverImpl.start() |