diff options
author | Aníbal Limón <anibal.limon@linux.intel.com> | 2016-10-04 16:15:56 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-10-05 00:14:58 +0100 |
commit | a583dc0b296415ec904c081c4de96ceef46732a8 (patch) | |
tree | e8f21fdd0b39edf279612c623066106c7eacce21 /lib/bb/event.py | |
parent | 81bc8201c475d2b6bef0168573915ad0140f6dad (diff) | |
download | bitbake-contrib-a583dc0b296415ec904c081c4de96ceef46732a8.tar.gz |
bb/event.py: fire_ui_handlers enable threading lock support
In some cases there is a need to fire bb events into multiple
python threads so locking is needed (writing to a fd/socket).
Adding a helper functions for disable/enable by request to avoid
overhead.
[YOCTO #10330]
Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/event.py')
-rw-r--r-- | lib/bb/event.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/bb/event.py b/lib/bb/event.py index 42745e241..65b7ebb43 100644 --- a/lib/bb/event.py +++ b/lib/bb/event.py @@ -29,6 +29,8 @@ import logging import atexit import traceback import ast +import threading + import bb.utils import bb.compat import bb.exceptions @@ -68,12 +70,22 @@ _event_handler_map = {} _catchall_handlers = {} _eventfilter = None _uiready = False +_thread_lock = threading.Lock() +_thread_lock_enabled = False if hasattr(__builtins__, '__setitem__'): builtins = __builtins__ else: builtins = __builtins__.__dict__ +def enable_threadlock(): + global _thread_lock_enabled + _thread_lock_enabled = True + +def disable_threadlock(): + global _thread_lock_enabled + _thread_lock_enabled = False + def execute_handler(name, handler, event, d): event.data = d addedd = False @@ -146,11 +158,17 @@ def print_ui_queue(): logger.handle(event) def fire_ui_handlers(event, d): + global _thread_lock + global _thread_lock_enabled + if not _uiready: # No UI handlers registered yet, queue up the messages ui_queue.append(event) return + if _thread_lock_enabled: + _thread_lock.acquire() + errors = [] for h in _ui_handlers: #print "Sending event %s" % event @@ -169,6 +187,9 @@ def fire_ui_handlers(event, d): for h in errors: del _ui_handlers[h] + if _thread_lock_enabled: + _thread_lock.release() + def fire(event, d): """Fire off an Event""" |