aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAníbal Limón <anibal.limon@linux.intel.com>2016-10-04 16:15:56 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-10-05 10:10:11 +0100
commit79012f943d3b3af1f439022f05a1287a383cd3f8 (patch)
tree441da4ddfb3263f60ee24e012e0400624e9d03dd
parent45f401abe59978b822e6198186ac5cd8c75d56ee (diff)
downloadopenembedded-core-contrib-79012f943d3b3af1f439022f05a1287a383cd3f8.tar.gz
bitbake: 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] (Bitbake rev: a583dc0b296415ec904c081c4de96ceef46732a8) Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/event.py21
-rw-r--r--bitbake/lib/toaster/tests/functional/README0
2 files changed, 21 insertions, 0 deletions
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
--- /dev/null
+++ b/bitbake/lib/toaster/tests/functional/README