From 36953fd09e134331a9e1aa7dd5619c628362ff4d Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 19 Jan 2010 13:22:00 +0000 Subject: runqueue.py: Improve IPC between worker threads and the server allowing proper event handling Signed-off-by: Richard Purdie --- lib/bb/event.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'lib/bb/event.py') 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 = "" + pickle.dumps(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("") or not event.endswith(""): + 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""" -- cgit 1.2.3-korg