aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2014-10-20 16:13:24 -0400
committerdaurnimator <quae@daurnimator.com>2014-10-20 16:13:24 -0400
commitdcd855afaa62797fc8285ff4a7a8e1a8f6279a1f (patch)
tree032ae646f40566f31102c4e76aacd8f843181945 /util
parentf0f0c0393ca2c0f6645fc2055c8e4aeffdac4225 (diff)
downloadprosody-dcd855afaa62797fc8285ff4a7a8e1a8f6279a1f.tar.gz
prosody-dcd855afaa62797fc8285ff4a7a8e1a8f6279a1f.zip
Move timer code out of util.timer and into relevant net.server backends
Diffstat (limited to 'util')
-rw-r--r--util/timer.lua67
1 files changed, 1 insertions, 66 deletions
diff --git a/util/timer.lua b/util/timer.lua
index 23bd6a37..0ec97585 100644
--- a/util/timer.lua
+++ b/util/timer.lua
@@ -9,80 +9,15 @@
local indexedbheap = require "util.indexedbheap";
local log = require "util.logger".init("timer");
local server = require "net.server";
-local math_min = math.min
-local math_huge = math.huge
local get_time = require "socket".gettime;
-local t_insert = table.insert;
-local pairs = pairs;
local type = type;
local debug_traceback = debug.traceback;
local tostring = tostring;
local xpcall = xpcall;
-local data = {};
-local new_data = {};
-
module "timer"
-local _add_task;
-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(current_time);
- if r and type(r) == "number" then
- return _add_task(r, callback);
- end
- end
- end
-
- server._addtimer(function()
- local current_time = get_time();
- if #new_data > 0 then
- for _, d in pairs(new_data) do
- t_insert(data, d);
- end
- new_data = {};
- end
-
- local next_time = math_huge;
- for i, d in pairs(data) do
- local t, callback = d[1], d[2];
- if t <= current_time then
- data[i] = nil;
- local r = callback(current_time);
- if type(r) == "number" then
- _add_task(r, callback);
- 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 = 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(get_time());
- if ret then
- return 0, ret;
- elseif event_handle then
- return EVENT_LEAVE;
- end
- end
- , delay);
- end
-end
-
+local _add_task = server.add_task;
--add_task = _add_task;
local h = indexedbheap.create();