summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-08 13:01:34 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-08 13:01:34 +0100
commit93059e36200b61f87f61578d9774172212446644 (patch)
treef94ffd2af6843c7b0f9d5b8f1fbb5d2d2859ada9
parentb420e865f6dfb04b58c1dbc5f1b5332b137f49ff (diff)
downloadbitbake-93059e36200b61f87f61578d9774172212446644.tar.gz
bitbake/server/process: Move implementation knowledge of event queue into the server
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-xbin/bitbake4
-rw-r--r--lib/bb/server/process.py20
-rw-r--r--lib/bb/ui/depexp.py8
-rw-r--r--lib/bb/ui/goggle.py10
-rw-r--r--lib/bb/ui/knotty.py5
-rw-r--r--lib/bb/ui/ncurses.py4
6 files changed, 32 insertions, 19 deletions
diff --git a/bin/bitbake b/bin/bitbake
index 483b986c2..c22e29ad1 100755
--- a/bin/bitbake
+++ b/bin/bitbake
@@ -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()
diff --git a/lib/bb/server/process.py b/lib/bb/server/process.py
index 88f819106..a5239400c 100644
--- a/lib/bb/server/process.py
+++ b/lib/bb/server/process.py
@@ -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
+
+
+
diff --git a/lib/bb/ui/depexp.py b/lib/bb/ui/depexp.py
index a0737ee0b..f11166fbd 100644
--- a/lib/bb/ui/depexp.py
+++ b/lib/bb/ui/depexp.py
@@ -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
diff --git a/lib/bb/ui/goggle.py b/lib/bb/ui/goggle.py
index 6278a4cbf..86ab2f473 100644
--- a/lib/bb/ui/goggle.py
+++ b/lib/bb/ui/goggle.py
@@ -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
diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py
index 1396939fc..44d1c1dc9 100644
--- a/lib/bb/ui/knotty.py
+++ b/lib/bb/ui/knotty.py
@@ -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:
diff --git a/lib/bb/ui/ncurses.py b/lib/bb/ui/ncurses.py
index ab626c9df..469f1b730 100644
--- a/lib/bb/ui/ncurses.py
+++ b/lib/bb/ui/ncurses.py
@@ -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):