Software /
code /
prosody
Changeset
12545:5059a639f61e
util.watchdog: Update to use "new" util.timer API
When this module was written, it wasn't possible to cancel or reschedule a
timer. Times have changed, and we should take advantage of those new methods.
This module becomes a very thin wrapper around util.timer now, but I'd argue
it's still a very common and useful concept/abstraction to have around.
Possible API change: this removes the 'last_reset' field of the watchdog. This
was never really intended as a public thing, and I can't find any code that
uses it, so I consider removal to be safe.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 11 Jun 2022 21:11:01 +0100 |
parents | 12544:00857bfa8ca2 |
children | 12546:e78b35574aae |
files | util/watchdog.lua |
diffstat | 1 files changed, 16 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/util/watchdog.lua Thu Jun 09 12:43:43 2022 +0100 +++ b/util/watchdog.lua Sat Jun 11 21:11:01 2022 +0100 @@ -9,27 +9,30 @@ 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; + local watchdog = setmetatable({ + timeout = timeout; + callback = callback; + timer_id = nil; + }, watchdog_mt); + + watchdog.timer_id = timer.add_task(timeout+1, function () + return watchdog:callback(); end); + return watchdog; end function watchdog_methods:reset() - self.last_reset = os_time(); + if self.timer_id then + timer.reschedule(self.timer_id, self.timeout); + end end function watchdog_methods:cancel() - self.last_reset = nil; + if self.timer_id then + timer.stop(self.timer_id); + self.timer_id = nil; + end end return {