# HG changeset patch # User Matthew Wild # Date 1319231565 14400 # Node ID 0ed617f58404e88735b3ecf5d285e299d998c0ed # Parent ac651265766c90147c3de7b70936e872ad5c42d8 util.watchdog: Watchdog timer library diff -r ac651265766c -r 0ed617f58404 util/watchdog.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/util/watchdog.lua Fri Oct 21 17:12:45 2011 -0400 @@ -0,0 +1,34 @@ +local timer = require "util.timer"; +local setmetatable = setmetatable; +local os_time = os.time; + +module "watchdog" + +local watchdog_methods = {}; +local watchdog_mt = { __index = watchdog_methods }; + +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 _M;