Skip to content

Commit 6703192

Browse files
committed
Refactor event.emit()
1 parent e93b109 commit 6703192

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

spockbot/plugins/core/event.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -52,17 +52,12 @@ def unreg_event_handler(self, event, handler):
5252
self.event_handlers[event].remove(handler)
5353

5454
def emit(self, event, data=None):
55-
to_remove = []
56-
# reversed, because handlers can register themselves
57-
# for the same event they handle, and the new handler
58-
# is appended to the end of the iterated handler list
59-
# and immediately run, so an infinite loop can be created
60-
for handler in reversed(self.event_handlers[event]):
55+
# the handler list of this event can change during handler execution,
56+
# so we loop over a copy
57+
for handler in self.event_handlers[event][:]:
6158
d = data.clone() if hasattr(data, 'clone') else copy.deepcopy(data)
6259
if handler(event, d) == EVENT_UNREGISTER:
63-
to_remove.append(handler)
64-
for handler in to_remove:
65-
self.event_handlers[event].remove(handler)
60+
self.event_handlers[event].remove(handler)
6661

6762
def kill(self, *args):
6863
self.kill_event = True

0 commit comments

Comments
 (0)