summaryrefslogtreecommitdiffstats
path: root/lib/bb/event.py
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-01-19 13:22:00 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2010-01-19 13:22:00 +0000
commit36953fd09e134331a9e1aa7dd5619c628362ff4d (patch)
tree0f57fa2c73c524df2ab348e16a2d415dac478c79 /lib/bb/event.py
parentd1df2bb2426a76798977b5623a303622e8bed14c (diff)
downloadbitbake-36953fd09e134331a9e1aa7dd5619c628362ff4d.tar.gz
runqueue.py: Improve IPC between worker threads and the server allowing proper event handling
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'lib/bb/event.py')
-rw-r--r--lib/bb/event.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/bb/event.py b/lib/bb/event.py
index 8b4222bfc..3062dc51b 100644
--- a/lib/bb/event.py
+++ b/lib/bb/event.py
@@ -29,6 +29,7 @@ import pickle
# This is the pid for which we should generate the event. This is set when
# the runqueue forks off.
worker_pid = 0
+worker_pipe = None
class Event:
"""Base class for events"""
@@ -50,6 +51,10 @@ _ui_handler_seq = 0
def fire(event, d):
"""Fire off an Event"""
+ if worker_pid != 0:
+ worker_fire(event, d)
+ return
+
for handler in _handlers:
h = _handlers[handler]
event.data = d
@@ -73,6 +78,18 @@ def fire(event, d):
for h in errors:
del _ui_handlers[h]
+def worker_fire(event, d):
+ data = "<event>" + pickle.dumps(event) + "</event>"
+ if os.write(worker_pipe, data) != len (data):
+ print "Error sending event to server (short write)"
+
+def fire_from_worker(event, d):
+ if not event.startswith("<event>") or not event.endswith("</event>"):
+ print "Error, not an event"
+ return
+ event = pickle.loads(event[7:-8])
+ bb.event.fire(event, d)
+
def register(name, handler):
"""Register an Event handler"""