From 022fcf602ea225ee7ad7dfd35e0059a2f5a2f5ff Mon Sep 17 00:00:00 2001 From: Endel Dreyer Date: Wed, 31 Jan 2024 13:29:16 -0300 Subject: [PATCH] event emitter: copy list of callbacks before iterating. closes #51 --- colyseus/eventemitter.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/colyseus/eventemitter.lua b/colyseus/eventemitter.lua index e962aae..e43e23a 100644 --- a/colyseus/eventemitter.lua +++ b/colyseus/eventemitter.lua @@ -68,7 +68,14 @@ function EventEmitter:new(object) end function object:emit (event, ...) - for _, listener in ipairs(self:listeners(event)) do + -- copy list before iterating over it + -- (make sure all previously registered callbacks are called, even if some are removed in-between) + local listeners = {} + for i, listener in ipairs(self:listeners(event)) do + listeners[i] = listener + end + + for i, listener in ipairs(listeners) do if "function" == type(listener) then listener(...)