From 8f00250f98485dfbbfc62923522977ffff64b6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20S=C3=B8rlie?= Date: Mon, 17 Feb 2025 22:04:10 +0100 Subject: [PATCH] Avoid deadlocks during permission update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alex Sørlie --- src/classes/Anope.mjs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/classes/Anope.mjs b/src/classes/Anope.mjs index d6ea2450..5c4ba7e1 100644 --- a/src/classes/Anope.mjs +++ b/src/classes/Anope.mjs @@ -127,10 +127,10 @@ class Anope { return new Nickname(result, user) }) - const updates = nicks.map((nick) => { - return Anope.runCommand('NickServ', nick.nick, 'UPDATE') - }) - await Promise.allSettled(updates) + /* eslint-disable no-await-in-loop */ + for (const nick of nicks) { + await Anope.runCommand('NickServ', nick.nick, 'UPDATE') + } } /** @@ -404,22 +404,20 @@ class Anope { return undefined } - const permissionChanges = Object.entries(channels).reduce((promises, [channel, flags]) => { - promises.push(Anope.setFlags({ channel, user, flags })) - promises.push(Anope.setInvite({ channel, user })) - return promises - }, []) + for (const [channel, flags] of Object.entries(channels)) { + await Anope.setFlags({ channel, user, flags }) + await Anope.setInvite({ channel, user }) + } - const syncs = Object.keys(channels).map((channel) => { - return Anope.syncChannel(channel) - }) - await Promise.allSettled(syncs) + for (const channel of Object.keys(channels)) { + await Anope.syncChannel(channel) + } setTimeout(() => { Anope.updateIRCState(user) }, nickUpdateWait) - return Promise.all(permissionChanges) + return undefined } /**