[bitbake-devel] [PATCHv2] bb/event.py: fire_ui_handlers enable threading lock support
Aníbal Limón
anibal.limon at linux.intel.com
Tue Oct 4 21:16:41 UTC 2016
Sorry it was a typo on acquire/release.
alimon
On 10/04/2016 04:15 PM, Aníbal Limón wrote:
> 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 at linux.intel.com>
> ---
> lib/bb/event.py | 21 +++++++++++++++++++++
> lib/toaster/tests/functional/README | 0
> 2 files changed, 21 insertions(+)
> create mode 100644 lib/toaster/tests/functional/README
>
> diff --git a/lib/bb/event.py b/lib/bb/event.py
> index 42745e2..65b7ebb 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"""
>
> diff --git a/lib/toaster/tests/functional/README b/lib/toaster/tests/functional/README
> new file mode 100644
> index 0000000..e69de29
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openembedded.org/pipermail/bitbake-devel/attachments/20161004/cfd2c844/attachment-0002.sig>
More information about the bitbake-devel
mailing list