From dfd8ea0667c6ccb57cb6e25ad1f3dc6b1c5eb919 Mon Sep 17 00:00:00 2001 From: soder Date: Sun, 2 Nov 2025 10:59:44 -0600 Subject: [PATCH] reversed listener execution order to prevent issues with listener removal. .wait() stores index as length of listeners. if there's multiple waiting listeners, they will cause eachother's index to be offset when removed. This will lead to loss non-temporary listeners. by reversing execution order the possiblity of this is removed. an example of this is below. --shared local bytenet = require(game.ReplicatedStorage.ByteNet) return bytenet.defineNamespace("meow", function() return { meow = bytenet.definePacket({ value = bytenet.string }) } end) --client local mod = require(game.ReplicatedStorage.ModuleScript) for i = 1, 2 do task.spawn(function() local tv = mod.meow.wait() print(tv, i) end) end --server local m = require(game.ReplicatedStorage.ModuleScript) m.meow.sendToAll("awa") --- src/process/read.luau | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/process/read.luau b/src/process/read.luau index f624cb9..142bd11 100644 --- a/src/process/read.luau +++ b/src/process/read.luau @@ -41,8 +41,9 @@ local function read(incoming_buff: buffer, references: { [number]: unknown }?, p read_cursor += value_len - for _, listener in packet.getListeners() do - run_listener(listener, value, player) + local listeners = packet.getListeners() + for i = #listeners, 1, -1 do + run_listener(listeners[i], value, player) end end end