summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/server/process.py17
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
38logger = logging.getLogger('BitBake') 38logger = logging.getLogger('BitBake')
39 39
40class ServerCommunicator(): 40class 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()