From d53889185ac93c9744ee2ad35eee863929267903 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Fri, 21 Oct 2011 17:12:45 -0400
Subject: util.watchdog: Watchdog timer library

---
 util/watchdog.lua | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 util/watchdog.lua

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;
-- 
cgit v1.2.3