]> git.lizzy.rs Git - lua_async.git/commitdiff
Safer timeout implementation
authorElias Fleckenstein <eliasfleckenstein@web.de>
Fri, 6 Aug 2021 18:01:59 +0000 (20:01 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Fri, 6 Aug 2021 18:01:59 +0000 (20:01 +0200)
timeouts.lua

index b3b69e8a659ed64d51d28af6d1180eee66a1da17..864889e30a52ffe9a8978627dec2100b26a46db0 100644 (file)
@@ -1,5 +1,6 @@
 lua_async.timeouts = {
        pool = {},
+       executing = {},
        last_id = 0,
 }
 
@@ -16,15 +17,22 @@ end
 
 function clearTimeout(id)
        lua_async.timeouts.pool[id] = nil
+       lua_async.timeouts.executing[id] = nil
 end
 
 function lua_async.timeouts.step(dtime)
-       for id, timeout in pairs(lua_async.timeouts.pool) do
+       lua_async.timeouts.executing = lua_async.timeouts.pool
+       lua_async.timeouts.pool = {}
+
+       for id, timeout in pairs(lua_async.timeouts.executing) do
                timeout.time_left = timeout.time_left - dtime
 
                if timeout.time_left <= 0 then
                        timeout.callback(unpack(timeout.args))
-                       clearTimeout(id)
+               else
+                       lua_async.timeouts.pool[id] = timeout
                end
+
+               lua_async.timeouts.executing[id] = nil
        end
 end