aboutsummaryrefslogtreecommitdiffstats
path: root/util/timer.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2015-11-22 17:20:20 +0100
committerKim Alvefur <zash@zash.se>2015-11-22 17:20:20 +0100
commit13c5628054e17a8f7f2402e81e8198ab52558dea (patch)
tree04087399e577bb0cf7d1d0a12f90038f80be1116 /util/timer.lua
parentdfe8a2fd7df0215f3e74c9bedcb9a8e9aa36c8c0 (diff)
downloadprosody-13c5628054e17a8f7f2402e81e8198ab52558dea.tar.gz
prosody-13c5628054e17a8f7f2402e81e8198ab52558dea.zip
util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
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 9042264d..78b4dbd7 100644
--- a/util/timer.lua
+++ b/util/timer.lua
@@ -43,8 +43,17 @@ local function _on_timer(now)
params[_id] = _param;
end
end
- next_time = peek;
- if peek ~= nil then
+
+ if peek ~= nil and _active_timers > 1 and peek == next_time then
+ -- Another instance of _on_timer already set next_time to the same value,
+ -- so it should be safe to not renew this timer event
+ peek = nil;
+ else
+ next_time = peek;
+ end
+
+ if peek then
+ -- peek is the time of the next event
return peek - now;
end
_active_timers = _active_timers - 1;