From d2631d39ca278c6823ffc6e19a670954507c981b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Thu, 26 Feb 2009 21:00:42 +0000 Subject: util.timer: Fix crash when loaded but no tasks set, fix skipping some tasks when multiple set, and one removed --- util/timer.lua | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/util/timer.lua b/util/timer.lua index 889a8c4c..8bb1c115 100644 --- a/util/timer.lua +++ b/util/timer.lua @@ -10,7 +10,8 @@ local ns_addtimer = require "net.server".addtimer; local get_time = os.time; local t_insert = table.insert; -local ipairs = ipairs; +local t_remove = table.remove; +local ipairs, pairs = ipairs, pairs; local type = type; local data = {}; @@ -30,14 +31,19 @@ add_task = _add_task; ns_addtimer(function() local current_time = get_time(); - for _, d in ipairs(new_data) do - t_insert(data, d); + if #new_data > 0 then + for _, d in ipairs(new_data) do + t_insert(data, d); + end + new_data = {}; + elseif #data == 0 then + return; end - new_data = {}; - for i = #data,1 do - local t, func = data[i][1], data[i][2]; + + for i, d in pairs(data) do + local t, func = d[1], d[2]; if t <= current_time then - data[i] = nil; + t_remove(data, i); local r = func(); if type(r) == "number" then _add_task(r, func); end end -- cgit v1.2.3