diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2010-01-19 13:22:00 +0000 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-01-19 13:22:00 +0000 |
commit | 36953fd09e134331a9e1aa7dd5619c628362ff4d (patch) | |
tree | 0f57fa2c73c524df2ab348e16a2d415dac478c79 /lib/bb/event.py | |
parent | d1df2bb2426a76798977b5623a303622e8bed14c (diff) | |
download | bitbake-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.py | 17 |
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""" |