frappy.lib.multievent: avoid deadlock

use RLock instead of Lock, as queued actions might call
the set/clear methods recursively

Change-Id: Id43aa8669955e6be9f61379d039a4f65eb7b2dc4
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/34950
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
This commit is contained in:
zolliker 2024-11-13 11:53:05 +01:00
parent 00ef174292
commit a246584c4a

View File

@ -55,7 +55,7 @@ class MultiEvent(threading.Event):
def __init__(self, default_timeout=None): def __init__(self, default_timeout=None):
self.events = set() self.events = set()
self._lock = threading.Lock() self._lock = threading.RLock()
self.default_timeout = default_timeout or None # treat 0 as None self.default_timeout = default_timeout or None # treat 0 as None
self.name = None # default event name self.name = None # default event name
self._actions = [] # actions to be executed on trigger self._actions = [] # actions to be executed on trigger