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 committed 2018-01-13 21:47:11 +01:00
1 parent 91b550662e
commit 32d9afc7bb
3 files changed
+7 -6

No files matched your search

-3
View File
@@ -69,9 +69,6 @@ static void pidfile_callback(void *arg, int fd, int events)
if (!svc) if (!svc)
continue; 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); mkcond(cond, sizeof(cond), svc->cmd);
if (ev->mask & (IN_CREATE | IN_ATTRIB | IN_MODIFY)) { if (ev->mask & (IN_CREATE | IN_ATTRIB | IN_MODIFY)) {
svc_started(svc); 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) 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]) {
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)); 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) 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; svc_t *svc, *iter = NULL;
for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { 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; return svc;
} }