lockfile: only compute and log once

This commit is contained in:
Jean-Francois Dockes 2021-11-13 10:30:09 +01:00
parent 2c60e382f8
commit 310d28a4a1

View File

@ -1398,36 +1398,38 @@ string RclConfig::getIdxStatusFile() const
// Thanks to user Madhu for this fix.
string RclConfig::getPidfile() const
{
string fn;
static string fn;
if (fn.empty()) {
#ifndef _WIN32
const char *p = getenv("XDG_RUNTIME_DIR");
string rundir;
if (nullptr == p) {
// Problem is, we may have been launched outside the desktop, maybe by cron. Basing
// everything on XDG_RUNTIME_DIR was a mistake, sometimes resulting in different pidfiles
// being used by recollindex instances. So explicitely test for /run/user/$uid, still
// leaving open the remote possibility that XDG_RUNTIME_DIR would be set to something
// else...
rundir = path_cat("/run/user", lltodecstr(getuid()));
if (path_isdir(rundir)) {
p = rundir.c_str();
const char *p = getenv("XDG_RUNTIME_DIR");
string rundir;
if (nullptr == p) {
// Problem is, we may have been launched outside the desktop, maybe by cron. Basing
// everything on XDG_RUNTIME_DIR was a mistake, sometimes resulting in different pidfiles
// being used by recollindex instances. So explicitely test for /run/user/$uid, still
// leaving open the remote possibility that XDG_RUNTIME_DIR would be set to something
// else...
rundir = path_cat("/run/user", lltodecstr(getuid()));
if (path_isdir(rundir)) {
p = rundir.c_str();
}
}
if (p) {
string base = path_canon(p);
string digest, hex;
string cfdir = path_canon(getConfDir());
path_catslash(cfdir);
MD5String(cfdir, digest);
MD5HexPrint(digest, hex);
fn = path_cat(base, "recoll-" + hex + "-index.pid");
goto out;
}
}
if (p) {
string base = path_canon(p);
string digest, hex;
string cfdir = path_canon(getConfDir());
path_catslash(cfdir);
MD5String(cfdir, digest);
MD5HexPrint(digest, hex);
fn = path_cat(base, "recoll-" + hex + "-index.pid");
goto out;
}
#endif // ! _WIN32
fn = path_cat(getCacheDir(), "index.pid");
fn = path_cat(getCacheDir(), "index.pid");
out:
LOGINF("RclConfig: pid/lock file: " << fn << "\n");
LOGINF("RclConfig: pid/lock file: " << fn << "\n");
}
return fn;
}