from bb import cooker
from bb import ui
from bb import server
-from bb.server.process import ProcessServer, ServerCommunicator
+from bb.server.process import ProcessServer, ServerCommunicator, ProcessEventQueue
from Queue import Empty
from multiprocessing import Queue, Pipe
# and a queue for server -> ui event notifications
#
ui_channel, server_channel = Pipe()
- event_queue = Queue()
+ event_queue = ProcessEventQueue()
server = ProcessServer(server_channel, event_queue, configuration)
server.start()
import sys
import time
from bb.cooker import BBCooker
-from multiprocessing import Event, Process, util
+from Queue import Empty
+from multiprocessing import Event, Process, util, Queue, Pipe, queues
logger = logging.getLogger('BitBake')
# which can result in a bitbake server hang during the parsing process
if (2, 6, 0) <= sys.version_info < (2, 6, 3):
_bootstrap = bootstrap_2_6_6
+
+# Wrap Queue to provide API which isn't server implementation specific
+class ProcessEventQueue(multiprocessing.queues.Queue):
+ def waitEvent(self, timeout):
+ try:
+ return self.get(True, timeout)
+ except Empty:
+ return None
+
+ def getEvent(self):
+ try:
+ return self.get(False)
+ except Empty:
+ return None
+
+
+
progress_total = 0
while True:
try:
- try:
- # We must get nonblocking here, else we'll never check the
- # quit signal
- event = eventHandler.get(False, 0.25)
- except Queue.Empty:
- pass
-
+ event = eventHandler.waitEvent(0.25)
if gtkthread.quit.isSet():
server.runCommand(["stateStop"])
break
def event_handle_idle_func (eventHandler, build, pbar):
# Consume as many messages as we can in the time available to us
- try:
- while 1:
- event = eventHandler.get(False)
- build.handle_event (event, pbar)
- except Queue.Empty:
- pass
+ event = eventHandler.getEvent()
+ while event:
+ build.handle_event (event, pbar)
+ event = eventHandler.getEvent()
return True
return_value = 0
while True:
try:
- event = eventHandler.get()
-
+ event = eventHandler.waitEvent(0.25)
+ if event is None:
+ continue
helper.eventHandler(event)
if isinstance(event, bb.runqueue.runQueueExitWait):
if not shutdown:
exitflag = False
while not exitflag:
try:
- event = eventHandler.get()
+ event = eventHandler.waitEvent(0.25)
+ if not event:
+ continue
helper.eventHandler(event)
if isinstance(event, bb.build.TaskBase):