aboutsummaryrefslogtreecommitdiffstats
path: root/util/timer.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2015-12-23 11:43:39 +0100
committerKim Alvefur <zash@zash.se>2015-12-23 11:43:39 +0100
commit9cf26570d1ed58175107e606a044506e5210f501 (patch)
treefe6e50f39ad51a36a21d6caaaf906388e622f437 /util/timer.lua
parent9a33b25f7024bf0d89e1c74e0e7bff78ab486464 (diff)
downloadprosody-9cf26570d1ed58175107e606a044506e5210f501.tar.gz
prosody-9cf26570d1ed58175107e606a044506e5210f501.zip
util.timer: Reschedule timers from stop() if the next pending event is stopped
Diffstat (limited to 'util/timer.lua')
-rw-r--r--util/timer.lua11
1 files changed, 10 insertions, 1 deletions
diff --git a/util/timer.lua b/util/timer.lua
index eb2bd7ea..2277ee77 100644
--- a/util/timer.lua
+++ b/util/timer.lua
@@ -79,7 +79,16 @@ local function add_task(delay, callback, param)
end
local function stop(id)
params[id] = nil;
- return h:remove(id);
+ local result, item, result_sync = h:remove(id);
+ local peek = h:peek();
+ if peek ~= next_time and _server_timer then
+ next_time = peek;
+ _server_timer:close();
+ if next_time ~= nil then
+ _server_timer = _add_task(next_time - get_time(), _on_timer);
+ end
+ end
+ return result, item, result_sync;
end
local function reschedule(id, delay)
local current_time = get_time();