bitbake/event.py: Run class eventhandlers in the task context but ensure UI handlers run in the server context
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
parent
871f731e57
commit
d3d36d9f44
|
@ -48,13 +48,7 @@ _handlers = {}
|
||||||
_ui_handlers = {}
|
_ui_handlers = {}
|
||||||
_ui_handler_seq = 0
|
_ui_handler_seq = 0
|
||||||
|
|
||||||
def fire(event, d):
|
def fire_class_handlers(event, d):
|
||||||
"""Fire off an Event"""
|
|
||||||
|
|
||||||
if worker_pid != 0:
|
|
||||||
worker_fire(event, d)
|
|
||||||
return
|
|
||||||
|
|
||||||
for handler in _handlers:
|
for handler in _handlers:
|
||||||
h = _handlers[handler]
|
h = _handlers[handler]
|
||||||
event.data = d
|
event.data = d
|
||||||
|
@ -65,6 +59,7 @@ def fire(event, d):
|
||||||
h(event)
|
h(event)
|
||||||
del event.data
|
del event.data
|
||||||
|
|
||||||
|
def fire_ui_handlers(event, d):
|
||||||
errors = []
|
errors = []
|
||||||
for h in _ui_handlers:
|
for h in _ui_handlers:
|
||||||
#print "Sending event %s" % event
|
#print "Sending event %s" % event
|
||||||
|
@ -78,6 +73,20 @@ def fire(event, d):
|
||||||
for h in errors:
|
for h in errors:
|
||||||
del _ui_handlers[h]
|
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):
|
def worker_fire(event, d):
|
||||||
data = "<event>" + pickle.dumps(event) + "</event>"
|
data = "<event>" + pickle.dumps(event) + "</event>"
|
||||||
try:
|
try:
|
||||||
|
@ -91,7 +100,7 @@ def fire_from_worker(event, d):
|
||||||
print "Error, not an event"
|
print "Error, not an event"
|
||||||
return
|
return
|
||||||
event = pickle.loads(event[7:-8])
|
event = pickle.loads(event[7:-8])
|
||||||
bb.event.fire(event, d)
|
fire_ui_handlers(event, d)
|
||||||
|
|
||||||
def register(name, handler):
|
def register(name, handler):
|
||||||
"""Register an Event handler"""
|
"""Register an Event handler"""
|
||||||
|
|
Loading…
Reference in New Issue