util.async: Optionally allow too many 'done' callbacks
Sometimes, like in mod_c2s and mod_s2s during shutdown, all you want is
to wait for the first done() and not complicate things.
--- a/util/async.lua Tue Feb 22 12:35:31 2022 +0100
+++ b/util/async.lua Tue Feb 22 14:17:10 2022 +0100
@@ -73,7 +73,7 @@
return true;
end
-local function waiter(num)
+local function waiter(num, allow_many)
local thread = checkthread();
num = num or 1;
local waiting;
@@ -85,7 +85,7 @@
num = num - 1;
if num == 0 and waiting then
runner_continue(thread);
- elseif num < 0 then
+ elseif not allow_many and num < 0 then
error("done() called too many times");
end
end;