diff options
Diffstat (limited to 'yocto-poky/bitbake/lib/bb/event.py')
-rw-r--r-- | yocto-poky/bitbake/lib/bb/event.py | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/yocto-poky/bitbake/lib/bb/event.py b/yocto-poky/bitbake/lib/bb/event.py index 366bc4188..5ffe89eae 100644 --- a/yocto-poky/bitbake/lib/bb/event.py +++ b/yocto-poky/bitbake/lib/bb/event.py @@ -31,6 +31,7 @@ except ImportError: import logging import atexit import traceback +import ast import bb.utils import bb.compat import bb.exceptions @@ -177,7 +178,7 @@ def fire_from_worker(event, d): fire_ui_handlers(event, d) noop = lambda _: None -def register(name, handler, mask=None): +def register(name, handler, mask=None, filename=None, lineno=None): """Register an Event handler""" # already registered @@ -189,7 +190,15 @@ def register(name, handler, mask=None): if isinstance(handler, basestring): tmp = "def %s(e):\n%s" % (name, handler) try: - code = compile(tmp, "%s(e)" % name, "exec") + code = bb.methodpool.compile_cache(tmp) + if not code: + if filename is None: + filename = "%s(e)" % name + code = compile(tmp, filename, "exec", ast.PyCF_ONLY_AST) + if lineno is not None: + ast.increment_lineno(code, lineno-1) + code = compile(code, filename, "exec") + bb.methodpool.compile_cache_add(tmp, code) except SyntaxError: logger.error("Unable to register event handler '%s':\n%s", name, ''.join(traceback.format_exc(limit=0))) @@ -595,6 +604,8 @@ class LogHandler(logging.Handler): etype, value, tb = record.exc_info if hasattr(tb, 'tb_next'): tb = list(bb.exceptions.extract_traceback(tb, context=3)) + # Need to turn the value into something the logging system can pickle + value = str(value) record.bb_exc_info = (etype, value, tb) record.exc_info = None fire(record, None) |