From a664e2ba60678280b37f036f6cb75d05f6276159 Mon Sep 17 00:00:00 2001
From: Matthew Wild <mwild1@gmail.com>
Date: Mon, 11 Jan 2010 00:14:33 +0000
Subject: util.prosodyctl: Report Prosody as not running if the pidfile isn't
 locked

---
 util/prosodyctl.lua | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

(limited to 'util')

diff --git a/util/prosodyctl.lua b/util/prosodyctl.lua
index e44c78d7..dafc7118 100644
--- a/util/prosodyctl.lua
+++ b/util/prosodyctl.lua
@@ -12,6 +12,7 @@ local encodings = require "util.encodings";
 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 @@ function getpid()
 		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 @@ end
 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;
-- 
cgit v1.2.3