Backout changeset 6e67c73f730c: not a major fix and it breaks interop with at least...
[prosody.git] / util / timer.lua
index d36fb8c425be824463f26eea120c70124f859639..af1e57b6d176c487b47c5e2d94e40c4eddb08247 100644 (file)
@@ -6,11 +6,7 @@
 -- COPYING file in the source package for more information.
 --
 
-
-local ns_addtimer = require "net.server".addtimer;
-local event = require "net.server".event;
-local event_base = require "net.server".event_base;
-
+local server = require "net.server";
 local math_min = math.min
 local math_huge = math.huge
 local get_time = require "socket".gettime;
@@ -24,21 +20,21 @@ local new_data = {};
 module "timer"
 
 local _add_task;
-if not event then
+if not server.event then
        function _add_task(delay, callback)
                local current_time = get_time();
                delay = delay + current_time;
                if delay >= current_time then
                        t_insert(new_data, {delay, callback});
                else
-                       local r = callback();
+                       local r = callback(current_time);
                        if r and type(r) == "number" then
                                return _add_task(r, callback);
                        end
                end
        end
 
-       ns_addtimer(function()
+       server._addtimer(function()
                local current_time = get_time();
                if #new_data > 0 then
                        for _, d in pairs(new_data) do
@@ -64,11 +60,14 @@ if not event then
                return next_time;
        end);
 else
+       local event = server.event;
+       local event_base = server.event_base;
        local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1;
+
        function _add_task(delay, callback)
                local event_handle;
                event_handle = event_base:addevent(nil, 0, function ()
-                       local ret = callback();
+                       local ret = callback(get_time());
                        if ret then
                                return 0, ret;
                        elseif event_handle then