summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/cookerdata.py2
-rw-r--r--bitbake/lib/bb/event.py26
-rw-r--r--bitbake/lib/bb/parse/ast.py2
-rw-r--r--bitbake/lib/bb/runqueue.py4
4 files changed, 28 insertions, 6 deletions
diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index c39b568130..1c1e008c6b 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -429,7 +429,7 @@ class CookerDataBuilder(object):
429 parselog.critical("Undefined event handler function '%s'" % var) 429 parselog.critical("Undefined event handler function '%s'" % var)
430 raise bb.BBHandledException() 430 raise bb.BBHandledException()
431 handlerln = int(data.getVarFlag(var, "lineno", False)) 431 handlerln = int(data.getVarFlag(var, "lineno", False))
432 bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) 432 bb.event.register(var, data.getVar(var, False), (data.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln, data)
433 433
434 data.setVar('BBINCLUDED',bb.parse.get_file_depends(data)) 434 data.setVar('BBINCLUDED',bb.parse.get_file_depends(data))
435 435
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 694b470520..ff89959460 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -118,6 +118,8 @@ def fire_class_handlers(event, d):
118 if _eventfilter: 118 if _eventfilter:
119 if not _eventfilter(name, handler, event, d): 119 if not _eventfilter(name, handler, event, d):
120 continue 120 continue
121 if d and not name in (d.getVar("__BBHANDLERS_MC") or []):
122 continue
121 execute_handler(name, handler, event, d) 123 execute_handler(name, handler, event, d)
122 124
123ui_queue = [] 125ui_queue = []
@@ -227,9 +229,13 @@ def fire_from_worker(event, d):
227 fire_ui_handlers(event, d) 229 fire_ui_handlers(event, d)
228 230
229noop = lambda _: None 231noop = lambda _: None
230def register(name, handler, mask=None, filename=None, lineno=None): 232def register(name, handler, mask=None, filename=None, lineno=None, data=None):
231 """Register an Event handler""" 233 """Register an Event handler"""
232 234
235 if data and data.getVar("BB_CURRENT_MC"):
236 mc = data.getVar("BB_CURRENT_MC")
237 name = '%s%s' % (mc, name)
238
233 # already registered 239 # already registered
234 if name in _handlers: 240 if name in _handlers:
235 return AlreadyRegistered 241 return AlreadyRegistered
@@ -268,10 +274,20 @@ def register(name, handler, mask=None, filename=None, lineno=None):
268 _event_handler_map[m] = {} 274 _event_handler_map[m] = {}
269 _event_handler_map[m][name] = True 275 _event_handler_map[m][name] = True
270 276
277 if data:
278 bbhands_mc = (data.getVar("__BBHANDLERS_MC") or [])
279 bbhands_mc.append(name)
280 data.setVar("__BBHANDLERS_MC", bbhands_mc)
281
271 return Registered 282 return Registered
272 283
273def remove(name, handler): 284def remove(name, handler, data=None):
274 """Remove an Event handler""" 285 """Remove an Event handler"""
286 if data:
287 if data.getVar("BB_CURRENT_MC"):
288 mc = data.getVar("BB_CURRENT_MC")
289 name = '%s%s' % (mc, name)
290
275 _handlers.pop(name) 291 _handlers.pop(name)
276 if name in _catchall_handlers: 292 if name in _catchall_handlers:
277 _catchall_handlers.pop(name) 293 _catchall_handlers.pop(name)
@@ -279,6 +295,12 @@ def remove(name, handler):
279 if name in _event_handler_map[event]: 295 if name in _event_handler_map[event]:
280 _event_handler_map[event].pop(name) 296 _event_handler_map[event].pop(name)
281 297
298 if data:
299 bbhands_mc = (data.getVar("__BBHANDLERS_MC") or [])
300 if name in bbhands_mc:
301 bbhands_mc.remove(name)
302 data.setVar("__BBHANDLERS_MC", bbhands_mc)
303
282def get_handlers(): 304def get_handlers():
283 return _handlers 305 return _handlers
284 306
diff --git a/bitbake/lib/bb/parse/ast.py b/bitbake/lib/bb/parse/ast.py
index 0596993d01..50a88f7da7 100644
--- a/bitbake/lib/bb/parse/ast.py
+++ b/bitbake/lib/bb/parse/ast.py
@@ -335,7 +335,7 @@ def finalize(fn, d, variant = None):
335 if not handlerfn: 335 if not handlerfn:
336 bb.fatal("Undefined event handler function '%s'" % var) 336 bb.fatal("Undefined event handler function '%s'" % var)
337 handlerln = int(d.getVarFlag(var, "lineno", False)) 337 handlerln = int(d.getVarFlag(var, "lineno", False))
338 bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln) 338 bb.event.register(var, d.getVar(var, False), (d.getVarFlag(var, "eventmask") or "").split(), handlerfn, handlerln, data=d)
339 339
340 bb.event.fire(bb.event.RecipePreFinalise(fn), d) 340 bb.event.fire(bb.event.RecipePreFinalise(fn), d)
341 341
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 2f521e5a14..b8b217c64a 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1466,7 +1466,7 @@ class RunQueue:
1466 if not self.dm_event_handler_registered: 1466 if not self.dm_event_handler_registered:
1467 res = bb.event.register(self.dm_event_handler_name, 1467 res = bb.event.register(self.dm_event_handler_name,
1468 lambda x: self.dm.check(self) if self.state in [runQueueRunning, runQueueCleanUp] else False, 1468 lambda x: self.dm.check(self) if self.state in [runQueueRunning, runQueueCleanUp] else False,
1469 ('bb.event.HeartbeatEvent',)) 1469 ('bb.event.HeartbeatEvent',), data=self.cfgData)
1470 self.dm_event_handler_registered = True 1470 self.dm_event_handler_registered = True
1471 1471
1472 dump = self.cooker.configuration.dump_signatures 1472 dump = self.cooker.configuration.dump_signatures
@@ -1505,7 +1505,7 @@ class RunQueue:
1505 build_done = self.state is runQueueComplete or self.state is runQueueFailed 1505 build_done = self.state is runQueueComplete or self.state is runQueueFailed
1506 1506
1507 if build_done and self.dm_event_handler_registered: 1507 if build_done and self.dm_event_handler_registered:
1508 bb.event.remove(self.dm_event_handler_name, None) 1508 bb.event.remove(self.dm_event_handler_name, None, data=self.cfgData)
1509 self.dm_event_handler_registered = False 1509 self.dm_event_handler_registered = False
1510 1510
1511 if build_done and self.rqexe: 1511 if build_done and self.rqexe: