# HG changeset patch # User Matthew Wild # Date 1263168873 0 # Node ID 5f14cd94a563780123369f7b7cabbcc16a4c2903 # Parent 08892e3f24bd4b167c0658926ea7480b0c19fd6f util.prosodyctl: Report Prosody as not running if the pidfile isn't locked diff -r 08892e3f24bd -r 5f14cd94a563 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;