]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake/event.py: Run class eventhandlers in the task context but ensure UI handlers...
authorRichard Purdie <rpurdie@linux.intel.com>
Thu, 25 Mar 2010 17:33:41 +0000 (17:33 +0000)
committerRichard Purdie <rpurdie@linux.intel.com>
Thu, 25 Mar 2010 17:33:41 +0000 (17:33 +0000)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/event.py

index b0750e826e15ac08218c7a5a09e5ad5472aa6c7c..afd5bf57c1e3573b1cb12217483c94c755dce28d 100644 (file)
@@ -48,13 +48,7 @@ _handlers = {}
 _ui_handlers = {}
 _ui_handler_seq = 0
 
-def fire(event, d):
-    """Fire off an Event"""
-
-    if worker_pid != 0:
-        worker_fire(event, d)
-        return
-
+def fire_class_handlers(event, d):
     for handler in _handlers:
         h = _handlers[handler]
         event.data = d
@@ -65,6 +59,7 @@ def fire(event, d):
             h(event)
         del event.data
 
+def fire_ui_handlers(event, d):
     errors = []
     for h in _ui_handlers:
         #print "Sending event %s" % event
@@ -78,6 +73,20 @@ def fire(event, d):
     for h in errors:
         del _ui_handlers[h]
 
+def fire(event, d):
+    """Fire off an Event"""
+
+    # We can fire class handlers in the worker process context and this is 
+    # desired so they get the task based datastore.
+    # UI handlers need to be fired in the server context so we defer this. They 
+    # don't have a datastore so the datastore context isn't a problem.
+
+    fire_class_handlers(event, d)
+    if worker_pid != 0:
+        worker_fire(event, d)
+    else:
+        fire_ui_handlers(event, d)
+
 def worker_fire(event, d):
     data = "<event>" + pickle.dumps(event) + "</event>"
     try:
@@ -91,7 +100,7 @@ def fire_from_worker(event, d):
         print "Error, not an event"
         return
     event = pickle.loads(event[7:-8])
-    bb.event.fire(event, d)
+    fire_ui_handlers(event, d)
 
 def register(name, handler):
     """Register an Event handler"""