Use pid_runpath() in svc_find_by_pidfile(), used by pidfile plugin

The pidfile plugin just listens to changes in files in /run or /var/run,
so when trying to locate an svc_t from a file change we need to compare
using the proper prefix path.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2018-01-13 21:47:11 +01:00
parent 91b550662e
commit 32d9afc7bb
3 changed files with 7 additions and 6 deletions
-3
View File
@@ -69,9 +69,6 @@ static void pidfile_callback(void *arg, int fd, int events)
if (!svc)
continue;
/* TODO FIXME XXX WKZ check that pid is controlled by finit */
_d("%s: match %s", ev->name, svc->cmd);
mkcond(cond, sizeof(cond), svc->cmd);
if (ev->mask & (IN_CREATE | IN_ATTRIB | IN_MODIFY)) {
svc_started(svc);
+4 -2
View File
@@ -115,7 +115,8 @@ char *pid_runpath(char *file, char *path, size_t len)
char *pid_file(svc_t *svc)
{
static char fn[MAX_ARG_LEN];
char fn[MAX_ARG_LEN];
static char path[MAX_ARG_LEN];
if (svc->pidfile[0]) {
if (svc->pidfile[0] == '!')
@@ -124,7 +125,8 @@ char *pid_file(svc_t *svc)
}
snprintf(fn, sizeof(fn), "%s%s.pid", _PATH_VARRUN, basename(svc->cmd));
return fn;
return pid_runpath(fn, path, sizeof(path));
}
int pid_file_create(svc_t *svc)
+3 -1
View File
@@ -355,7 +355,9 @@ svc_t *svc_find_by_pidfile(char *fn)
svc_t *svc, *iter = NULL;
for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) {
if (string_compare(fn, pid_file(svc)))
char path[MAX_ARG_LEN];
if (string_compare(pid_runpath(fn, path, sizeof(path)), pid_file(svc)))
return svc;
}