aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/dns.lua2
-rw-r--r--util/json.lua2
-rw-r--r--util/watchdog.lua34
3 files changed, 36 insertions, 2 deletions
diff --git a/net/dns.lua b/net/dns.lua
index 7bf5653b..8f428476 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -705,7 +705,7 @@ function resolver:purge(soft) -- - - - - - - - - - - - - - - - - - - purge
end
end
end
- else self.cache = {}; end
+ else self.cache = setmetatable({}, cache_metatable); end
end
diff --git a/util/json.lua b/util/json.lua
index cfa84a4b..5d0b0876 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -168,7 +168,7 @@ function json.decode(json)
skipwhitespace();
if ch == "/" and peek == "*" then
skipstarcomment();
- elseif ch == "/" and peek == "*" then
+ elseif ch == "/" and peek == "/" then
skiplinecomment();
else
return;
diff --git a/util/watchdog.lua b/util/watchdog.lua
new file mode 100644
index 00000000..96031415
--- /dev/null
+++ b/util/watchdog.lua
@@ -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;