From 79012f943d3b3af1f439022f05a1287a383cd3f8 Mon Sep 17 00:00:00 2001 From: Aníbal Limón Date: Tue, 4 Oct 2016 16:15:56 -0500 Subject: bitbake: bb/event.py: fire_ui_handlers enable threading lock support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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] (Bitbake rev: a583dc0b296415ec904c081c4de96ceef46732a8) Signed-off-by: Aníbal Limón Signed-off-by: Richard Purdie --- bitbake/lib/bb/event.py | 21 +++++++++++++++++++++ bitbake/lib/toaster/tests/functional/README | 0 2 files changed, 21 insertions(+) create mode 100644 bitbake/lib/toaster/tests/functional/README (limited to 'bitbake/lib') diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index 42745e241e..65b7ebb43b 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/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""" diff --git a/bitbake/lib/toaster/tests/functional/README b/bitbake/lib/toaster/tests/functional/README new file mode 100644 index 0000000000..e69de29bb2 -- cgit 1.2.3-korg