* [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.