diff options
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r-- | bitbake/lib/bb/event.py | 73 |
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 | ||
74 | def enable_threadlock(): | 73 | def enable_threadlock(): |
75 | global _thread_lock_enabled | 74 | # Always needed now |
76 | _thread_lock_enabled = True | 75 | return |
77 | 76 | ||
78 | def disable_threadlock(): | 77 | def disable_threadlock(): |
79 | global _thread_lock_enabled | 78 | # Always needed now |
80 | _thread_lock_enabled = False | 79 | return |
81 | 80 | ||
82 | def enable_heartbeat(): | 81 | def enable_heartbeat(): |
83 | global _heartbeat_enabled | 82 | global _heartbeat_enabled |
@@ -179,36 +178,30 @@ def print_ui_queue(): | |||
179 | 178 | ||
180 | def fire_ui_handlers(event, d): | 179 | def 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 | ||
213 | def fire(event, d): | 206 | def 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 | ||
324 | def register_UIHhandler(handler, mainui=False): | 317 | def 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 | ||
334 | def unregister_UIHhandler(handlerNum, mainui=False): | 328 | def 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 | ||
342 | def get_uihandler(): | 337 | def get_uihandler(): |