util.timer: Fix crash when loaded but no tasks set, fix skipping some tasks when multiple set, and one removed

Thu, 26 Feb 2009 21:00:42 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Thu, 26 Feb 2009 21:00:42 +0000
changeset 841
77ff000c2055
parent 840
ad842df925c7
child 842
4932f94d35c1

util.timer: Fix crash when loaded but no tasks set, fix skipping some tasks when multiple set, and one removed

util/timer.lua file | annotate | diff | comparison | revisions
--- 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

mercurial