aboutsummaryrefslogtreecommitdiffstats
path: root/util/timer.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2010-12-02 22:41:26 +0500
committerWaqas Hussain <waqas20@gmail.com>2010-12-02 22:41:26 +0500
commit02b951a1a8295ca1a3240bdc72ab712d8b91acbf (patch)
treea7f41307ecc807b1405e92213e27171de5fe438e /util/timer.lua
parent4495fa21ccd41ee1fc21dc41aeb48f9b00be58e7 (diff)
downloadprosody-02b951a1a8295ca1a3240bdc72ab712d8b91acbf.tar.gz
prosody-02b951a1a8295ca1a3240bdc72ab712d8b91acbf.zip
util.timer: Activate higher timer precision.
Diffstat (limited to 'util/timer.lua')
-rw-r--r--util/timer.lua13
1 files changed, 11 insertions, 2 deletions
diff --git a/util/timer.lua b/util/timer.lua
index fa1dd7c5..3061da72 100644
--- a/util/timer.lua
+++ b/util/timer.lua
@@ -11,7 +11,9 @@ local ns_addtimer = require "net.server".addtimer;
local event = require "net.server".event;
local event_base = require "net.server".event_base;
-local get_time = os.time;
+local math_min = math.min
+local math_huge = math.huge
+local get_time = require "socket".gettime;
local t_insert = table.insert;
local t_remove = table.remove;
local ipairs, pairs = ipairs, pairs;
@@ -43,14 +45,21 @@ if not event then
new_data = {};
end
+ local next_time = math_huge;
for i, d in pairs(data) do
local t, func = d[1], d[2];
if t <= current_time then
data[i] = nil;
local r = func(current_time);
- if type(r) == "number" then _add_task(r, func); end
+ if type(r) == "number" then
+ _add_task(r, func);
+ next_time = math_min(next_time, r);
+ end
+ else
+ next_time = math_min(next_time, t - current_time);
end
end
+ return next_time;
end);
else
local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1;