aboutsummaryrefslogtreecommitdiffstats
path: root/util/prosodyctl.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2010-01-11 00:14:33 +0000
committerMatthew Wild <mwild1@gmail.com>2010-01-11 00:14:33 +0000
commita664e2ba60678280b37f036f6cb75d05f6276159 (patch)
tree9a9121442550b0d85c15ca7c479ec8b908718bd1 /util/prosodyctl.lua
parente3ac62a1b863a4df2618cd904324560584aeab8e (diff)
downloadprosody-a664e2ba60678280b37f036f6cb75d05f6276159.tar.gz
prosody-a664e2ba60678280b37f036f6cb75d05f6276159.zip
util.prosodyctl: Report Prosody as not running if the pidfile isn't locked
Diffstat (limited to 'util/prosodyctl.lua')
-rw-r--r--util/prosodyctl.lua11
1 files changed, 9 insertions, 2 deletions
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;