Skip to content

Commit 022fcf6

Browse files
committed
event emitter: copy list of callbacks before iterating. closes #51
1 parent 99ed590 commit 022fcf6

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

colyseus/eventemitter.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,14 @@ function EventEmitter:new(object)
6868
end
6969

7070
function object:emit (event, ...)
71-
for _, listener in ipairs(self:listeners(event)) do
71+
-- copy list before iterating over it
72+
-- (make sure all previously registered callbacks are called, even if some are removed in-between)
73+
local listeners = {}
74+
for i, listener in ipairs(self:listeners(event)) do
75+
listeners[i] = listener
76+
end
77+
78+
for i, listener in ipairs(listeners) do
7279
if "function" == type(listener) then
7380
listener(...)
7481

0 commit comments

Comments
 (0)