summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/event.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r--bitbake/lib/bb/event.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index d73067fcf9..9c134eed0d 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -64,6 +64,8 @@ def clean_class_handlers():
64_handlers = clean_class_handlers() 64_handlers = clean_class_handlers()
65_ui_handlers = {} 65_ui_handlers = {}
66_ui_handler_seq = 0 66_ui_handler_seq = 0
67_event_handler_map = {}
68_catchall_handlers = {}
67 69
68def execute_handler(name, handler, event, d): 70def execute_handler(name, handler, event, d):
69 event.data = d 71 event.data = d
@@ -87,11 +89,14 @@ def fire_class_handlers(event, d):
87 if isinstance(event, logging.LogRecord): 89 if isinstance(event, logging.LogRecord):
88 return 90 return
89 91
92 eid = str(event.__class__)[8:-2]
93 evt_hmap = _event_handler_map.get(eid, {})
90 for name, handler in _handlers.iteritems(): 94 for name, handler in _handlers.iteritems():
91 try: 95 if name in _catchall_handlers or name in evt_hmap:
92 execute_handler(name, handler, event, d) 96 try:
93 except Exception: 97 execute_handler(name, handler, event, d)
94 continue 98 except Exception:
99 continue
95 100
96ui_queue = [] 101ui_queue = []
97@atexit.register 102@atexit.register
@@ -160,7 +165,7 @@ def fire_from_worker(event, d):
160 fire_ui_handlers(event, d) 165 fire_ui_handlers(event, d)
161 166
162noop = lambda _: None 167noop = lambda _: None
163def register(name, handler): 168def register(name, handler, mask=[]):
164 """Register an Event handler""" 169 """Register an Event handler"""
165 170
166 # already registered 171 # already registered
@@ -185,6 +190,14 @@ def register(name, handler):
185 else: 190 else:
186 _handlers[name] = handler 191 _handlers[name] = handler
187 192
193 if not mask:
194 _catchall_handlers[name] = True
195 else:
196 for m in mask:
197 if _event_handler_map.get(m, None) is None:
198 _event_handler_map[m] = {}
199 _event_handler_map[m][name] = True
200
188 return Registered 201 return Registered
189 202
190def remove(name, handler): 203def remove(name, handler):