All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2] bb/event.py: fire_ui_handlers enable threading lock support
@ 2016-10-04 21:15 Aníbal Limón
  2016-10-04 21:16 ` Aníbal Limón
  0 siblings, 1 reply; 2+ messages in thread
From: Aníbal Limón @ 2016-10-04 21:15 UTC (permalink / raw)
  To: bitbake-devel; +Cc: joshua.g.lock, clarson

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>
---
 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
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCHv2] bb/event.py: fire_ui_handlers enable threading lock support
  2016-10-04 21:15 [PATCHv2] bb/event.py: fire_ui_handlers enable threading lock support Aníbal Limón
@ 2016-10-04 21:16 ` Aníbal Limón
  0 siblings, 0 replies; 2+ messages in thread
From: Aníbal Limón @ 2016-10-04 21:16 UTC (permalink / raw)
  To: bitbake-devel; +Cc: joshua.g.lock, clarson

[-- Attachment #1: Type: text/plain, Size: 2494 bytes --]

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@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
> 


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-10-04 21:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-04 21:15 [PATCHv2] bb/event.py: fire_ui_handlers enable threading lock support Aníbal Limón
2016-10-04 21:16 ` Aníbal Limón

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.