[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