Software /
code /
prosody
File
util/watchdog.lua @ 12047:81858fd6f198
mod_smacks: Flag both sessions to prevent duplicating queue on resumption
I have no idea what is going on in this code, which session is which?
Something has one of the sessions as an upvalue which is where the
filter checks for it.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 14 Dec 2021 12:59:38 +0100 |
parent | 8555:4f0f5b49bb03 |
child | 12545:5059a639f61e |
line wrap: on
line source
local timer = require "util.timer"; local setmetatable = setmetatable; local os_time = os.time; local _ENV = nil; -- luacheck: std none local watchdog_methods = {}; local watchdog_mt = { __index = watchdog_methods }; local function new(timeout, callback) local watchdog = setmetatable({ timeout = timeout, last_reset = os_time(), callback = callback }, watchdog_mt); timer.add_task(timeout+1, function (current_time) local last_reset = watchdog.last_reset; if not last_reset then return; end local time_left = (last_reset + timeout) - current_time; if time_left < 0 then return watchdog:callback(); end return time_left + 1; end); return watchdog; end function watchdog_methods:reset() self.last_reset = os_time(); end function watchdog_methods:cancel() self.last_reset = nil; end return { new = new; };