util.timer: Fix crash when loaded but no tasks set, fix skipping some tasks when...
authorMatthew Wild <mwild1@gmail.com>
Thu, 26 Feb 2009 21:00:42 +0000 (21:00 +0000)
committerMatthew Wild <mwild1@gmail.com>
Thu, 26 Feb 2009 21:00:42 +0000 (21:00 +0000)
util/timer.lua

index 889a8c4c0669d7d032a6a2f7bd63c23d91d943e0..8bb1c11507b6e30615adc5ea450f3a4db9df76b9 100644 (file)
@@ -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