diff options
| author | 2020-02-15 20:42:18 +0000 | |
|---|---|---|
| committer | 2020-02-15 20:42:18 +0000 | |
| commit | 2b19c337f00232b290465ef49ef451777e151396 (patch) | |
| tree | f75b9f1e94a710d54d7e13b3ca9190a8d736449e /src/EventManager.py | |
| parent | add !badgeclear (diff) | |
| signature | ||
don't call hooks added during event call and don't call ones removed
Diffstat (limited to 'src/EventManager.py')
| -rw-r--r-- | src/EventManager.py | 7 |
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) |
