Software /
code /
prosody
Diff
util/timer.lua @ 841:77ff000c2055
util.timer: Fix crash when loaded but no tasks set, fix skipping some tasks when multiple set, and one removed
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 26 Feb 2009 21:00:42 +0000 |
parent | 832:282ae70db19f |
child | 842:4932f94d35c1 |
line wrap: on
line diff
--- a/util/timer.lua Thu Feb 26 16:55:46 2009 +0000 +++ b/util/timer.lua Thu Feb 26 21:00:42 2009 +0000 @@ -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 @@ 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