From: Roy Marples Date: Fri, 1 Apr 2016 21:27:22 +0000 (+0000) Subject: Fix pidfile_lock compat on Linux. X-Git-Tag: v6.10.2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=665551d7af241883fd840647b38710465ccfbc79;p=thirdparty%2Fdhcpcd.git Fix pidfile_lock compat on Linux. --- diff --git a/compat/pidfile.c b/compat/pidfile.c index 74367020..8adc1a0f 100644 --- a/compat/pidfile.c +++ b/compat/pidfile.c @@ -25,6 +25,8 @@ * SUCH DAMAGE. */ +#include + #include #include #include @@ -37,7 +39,7 @@ #include #include "pidfile.h" -#include "../defs.h" +#include "../config.h" static pid_t pidfile_pid; static char *pidfile_path; @@ -146,7 +148,7 @@ pidfile_lock(const char *path) pidfile_fd = -1; /* Don't unlink, other process has lock. */ errno = error; - return -1; + return errno == EAGAIN ? pidfile_read(path) : -1; } #endif #ifndef O_CLOEXEC diff --git a/dhcpcd.c b/dhcpcd.c index a6863a80..ac5720a4 100644 --- a/dhcpcd.c +++ b/dhcpcd.c @@ -1800,9 +1800,13 @@ printpidfile: if (!(ctx.options & DHCPCD_TEST)) { if ((pid = pidfile_lock(ctx.pidfile)) != 0) { - logger(&ctx, LOG_ERR, ""PACKAGE - " already running on pid %d (%s)", - pid, ctx.pidfile); + if (pid == -1) + logger(&ctx, LOG_ERR, "%s: pidfile_lock: %m", + __func__); + else + logger(&ctx, LOG_ERR, ""PACKAGE + " already running on pid %d (%s)", + pid, ctx.pidfile); goto exit_failure; }