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.py73
1 files changed, 34 insertions, 39 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index db90724444..7826541a64 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -68,16 +68,15 @@ _catchall_handlers = {}
68_eventfilter = None 68_eventfilter = None
69_uiready = False 69_uiready = False
70_thread_lock = threading.Lock() 70_thread_lock = threading.Lock()
71_thread_lock_enabled = False
72_heartbeat_enabled = False 71_heartbeat_enabled = False
73 72
74def enable_threadlock(): 73def enable_threadlock():
75 global _thread_lock_enabled 74 # Always needed now
76 _thread_lock_enabled = True 75 return
77 76
78def disable_threadlock(): 77def disable_threadlock():
79 global _thread_lock_enabled 78 # Always needed now
80 _thread_lock_enabled = False 79 return
81 80
82def enable_heartbeat(): 81def enable_heartbeat():
83 global _heartbeat_enabled 82 global _heartbeat_enabled
@@ -179,36 +178,30 @@ def print_ui_queue():
179 178
180def fire_ui_handlers(event, d): 179def fire_ui_handlers(event, d):
181 global _thread_lock 180 global _thread_lock
182 global _thread_lock_enabled
183 181
184 if not _uiready: 182 if not _uiready:
185 # No UI handlers registered yet, queue up the messages 183 # No UI handlers registered yet, queue up the messages
186 ui_queue.append(event) 184 ui_queue.append(event)
187 return 185 return
188 186
189 if _thread_lock_enabled: 187 with _thread_lock:
190 _thread_lock.acquire() 188 errors = []
191 189 for h in _ui_handlers:
192 errors = [] 190 #print "Sending event %s" % event
193 for h in _ui_handlers: 191 try:
194 #print "Sending event %s" % event 192 if not _ui_logfilters[h].filter(event):
195 try: 193 continue
196 if not _ui_logfilters[h].filter(event): 194 # We use pickle here since it better handles object instances
197 continue 195 # which xmlrpc's marshaller does not. Events *must* be serializable
198 # We use pickle here since it better handles object instances 196 # by pickle.
199 # which xmlrpc's marshaller does not. Events *must* be serializable 197 if hasattr(_ui_handlers[h].event, "sendpickle"):
200 # by pickle. 198 _ui_handlers[h].event.sendpickle((pickle.dumps(event)))
201 if hasattr(_ui_handlers[h].event, "sendpickle"): 199 else:
202 _ui_handlers[h].event.sendpickle((pickle.dumps(event))) 200 _ui_handlers[h].event.send(event)
203 else: 201 except:
204 _ui_handlers[h].event.send(event) 202 errors.append(h)
205 except: 203 for h in errors:
206 errors.append(h) 204 del _ui_handlers[h]
207 for h in errors:
208 del _ui_handlers[h]
209
210 if _thread_lock_enabled:
211 _thread_lock.release()
212 205
213def fire(event, d): 206def fire(event, d):
214 """Fire off an Event""" 207 """Fire off an Event"""
@@ -322,21 +315,23 @@ def set_eventfilter(func):
322 _eventfilter = func 315 _eventfilter = func
323 316
324def register_UIHhandler(handler, mainui=False): 317def register_UIHhandler(handler, mainui=False):
325 bb.event._ui_handler_seq = bb.event._ui_handler_seq + 1 318 with _thread_lock:
326 _ui_handlers[_ui_handler_seq] = handler 319 bb.event._ui_handler_seq = bb.event._ui_handler_seq + 1
327 level, debug_domains = bb.msg.constructLogOptions() 320 _ui_handlers[_ui_handler_seq] = handler
328 _ui_logfilters[_ui_handler_seq] = UIEventFilter(level, debug_domains) 321 level, debug_domains = bb.msg.constructLogOptions()
329 if mainui: 322 _ui_logfilters[_ui_handler_seq] = UIEventFilter(level, debug_domains)
330 global _uiready 323 if mainui:
331 _uiready = _ui_handler_seq 324 global _uiready
332 return _ui_handler_seq 325 _uiready = _ui_handler_seq
326 return _ui_handler_seq
333 327
334def unregister_UIHhandler(handlerNum, mainui=False): 328def unregister_UIHhandler(handlerNum, mainui=False):
335 if mainui: 329 if mainui:
336 global _uiready 330 global _uiready
337 _uiready = False 331 _uiready = False
338 if handlerNum in _ui_handlers: 332 with _thread_lock:
339 del _ui_handlers[handlerNum] 333 if handlerNum in _ui_handlers:
334 del _ui_handlers[handlerNum]
340 return 335 return
341 336
342def get_uihandler(): 337def get_uihandler():