util.prosodyctl: Report Prosody as not running if the pidfile isn't locked
authorMatthew Wild <mwild1@gmail.com>
Mon, 11 Jan 2010 00:14:33 +0000
changeset 2794 5f14cd94a563
parent 2793 08892e3f24bd
child 2795 d6fcd13c07e7
util.prosodyctl: Report Prosody as not running if the pidfile isn't locked
util/prosodyctl.lua
--- a/util/prosodyctl.lua	Sun Jan 10 23:49:38 2010 +0000
+++ b/util/prosodyctl.lua	Mon Jan 11 00:14:33 2010 +0000
@@ -12,6 +12,7 @@
 local stringprep = encodings.stringprep;
 local usermanager = require "core.usermanager";
 local signal = require "util.signal";
+local lfs = require "lfs";
 
 local nodeprep, nameprep = stringprep.nodeprep, stringprep.nameprep;
 
@@ -64,11 +65,17 @@
 		return false, "no-pidfile";
 	end
 	
-	local file, err = io.open(pidfile);
+	local file, err = io.open(pidfile, "w");
 	if not file then
 		return false, "pidfile-read-failed", err;
 	end
 	
+	local locked, err = lfs.lock(file, "w");
+	if locked then
+		file:close();
+		return false, "pidfile-not-locked";
+	end
+	
 	local pid = tonumber(file:read("*a"));
 	file:close();
 	
@@ -82,7 +89,7 @@
 function isrunning()
 	local ok, pid, err = _M.getpid();
 	if not ok then
-		if pid == "pidfile-read-failed" then
+		if pid == "pidfile-read-failed" or pid == "pidfile-not-locked" then
 			-- Report as not running, since we can't open the pidfile
 			-- (it probably doesn't exist)
 			return true, false;