]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bitbake/server/process: Move implementation knowledge of event queue into the server
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 12:01:34 +0000 (13:01 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 8 Jun 2011 12:01:34 +0000 (13:01 +0100)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bin/bitbake
lib/bb/server/process.py
lib/bb/ui/depexp.py
lib/bb/ui/goggle.py
lib/bb/ui/knotty.py
lib/bb/ui/ncurses.py

index 483b986c2722c58dd03285dcb42a7dda5e9b9772..c22e29ad1c824e7323e5fe6fcee96a9395ba2ebd 100755 (executable)
@@ -40,7 +40,7 @@ import bb.msg
 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
@@ -192,7 +192,7 @@ Default BBFILES are the .bb files in the current directory.""")
     # 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()
index 88f819106859b6e5ded6ba48237230a8f04aa22c..a5239400c608591724065fe091683f6ec5b4509d 100644 (file)
@@ -30,7 +30,8 @@ import signal
 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')
 
@@ -193,3 +194,20 @@ class ProcessServer(Process):
     # 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
+
+
+
index a0737ee0b5ad023c86feccd543ac8a36f67f28a1..f11166fbdd6acef7e2840b618bcf0dfdcbb39a84 100644 (file)
@@ -223,13 +223,7 @@ def main(server, eventHandler):
     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
index 6278a4cbf0ed0069fdf44108c7eac7a097fca9ab..86ab2f473c2cf5922b88a29a2c3ea79b96c55ec3 100644 (file)
@@ -30,12 +30,10 @@ import Queue
 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
 
index 1396939fcab74a639261b48084a7ab95db89c34e..44d1c1dc92a6f296f9e2021915e6291ad7661451 100644 (file)
@@ -96,8 +96,9 @@ def main(server, eventHandler):
     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:
index ab626c9dfc8b17c1a4aeec6ba51b887832b82912..469f1b730931779cae62cd80b761c8785234d562 100644 (file)
@@ -244,7 +244,9 @@ class NCursesUI:
         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):