Software /
code /
prosody
Comparison
util/watchdog.lua @ 4401:0ed617f58404
util.watchdog: Watchdog timer library
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 21 Oct 2011 17:12:45 -0400 |
child | 4891:189cfe565d03 |
comparison
equal
deleted
inserted
replaced
4400:ac651265766c | 4401:0ed617f58404 |
---|---|
1 local timer = require "util.timer"; | |
2 local setmetatable = setmetatable; | |
3 local os_time = os.time; | |
4 | |
5 module "watchdog" | |
6 | |
7 local watchdog_methods = {}; | |
8 local watchdog_mt = { __index = watchdog_methods }; | |
9 | |
10 function new(timeout, callback) | |
11 local watchdog = setmetatable({ timeout = timeout, last_reset = os_time(), callback = callback }, watchdog_mt); | |
12 timer.add_task(timeout+1, function (current_time) | |
13 local last_reset = watchdog.last_reset; | |
14 if not last_reset then | |
15 return; | |
16 end | |
17 local time_left = (last_reset + timeout) - current_time; | |
18 if time_left < 0 then | |
19 return watchdog.callback(); | |
20 end | |
21 return time_left + 1; | |
22 end); | |
23 return watchdog; | |
24 end | |
25 | |
26 function watchdog_methods:reset() | |
27 self.last_reset = os_time(); | |
28 end | |
29 | |
30 function watchdog_methods:cancel() | |
31 self.last_reset = nil; | |
32 end | |
33 | |
34 return _M; |