bitbake: event: Handle recursive events and the data store better

Events can call each other recursively, e.g. an event handler can call
bb.note which in turn generates another event. If these loop, it
can lead to multiple deletions of 'd' from __builtins__ which
can fail since __builtins__ is global scope.

Add handling to only remove 'd' when we added it and it wasn't already
present.

(Bitbake rev: b45952650ce8f470f124df36185b79e0d3a1783a)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2015-06-25 22:52:17 +01:00
parent 00ca43be05
commit 8c3dd2d9eb

View File

@@ -72,7 +72,10 @@ _eventfilter = None
def execute_handler(name, handler, event, d):
event.data = d
__builtins__['d'] = d
addedd = False
if 'd' not in __builtins__:
__builtins__['d'] = d
addedd = True
try:
ret = handler(event)
except (bb.parse.SkipRecipe, bb.BBHandledException):
@@ -88,7 +91,8 @@ def execute_handler(name, handler, event, d):
raise
finally:
del event.data
del __builtins__['d']
if addedd:
del __builtins__['d']
def fire_class_handlers(event, d):
if isinstance(event, logging.LogRecord):