aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2020-02-15 20:42:18 +0000
committerGravatar jesopo2020-02-15 20:42:18 +0000
commit2b19c337f00232b290465ef49ef451777e151396 (patch)
treef75b9f1e94a710d54d7e13b3ca9190a8d736449e
parentadd !badgeclear (diff)
signature
don't call hooks added during event call and don't call ones removed
-rw-r--r--src/EventManager.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/EventManager.py b/src/EventManager.py
index 020eeaa6..1d669f17 100644
--- a/src/EventManager.py
+++ b/src/EventManager.py
@@ -185,7 +185,9 @@ class EventRoot(object):
[path_str, str(kwargs)])
start = time.monotonic()
- hooks = self._hooks[path_str]
+ # .copy() hooks so we don't call new hooks in this loop
+ mutable_hooks = self._hooks[path_str]
+ hooks = mutable_hooks.copy()
if maximum:
hooks = hooks[:maximum]
event = self._make_event(path, kwargs)
@@ -193,6 +195,9 @@ class EventRoot(object):
for hook in hooks:
if event.eaten:
break
+ if not hook in mutable_hooks:
+ # this hook has been removed while handling this event
+ continue
try:
returned = hook.call(event)