From: Roy Marples Date: Sun, 13 May 2007 13:46:39 +0000 (+0000) Subject: Keep flock on pidfile open for while running. X-Git-Tag: v3.2.3~258 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cefc00ea6f14add619597183708954271c0974c0;p=thirdparty%2Fdhcpcd.git Keep flock on pidfile open for while running. --- diff --git a/client.c b/client.c index d32f6298..a76c654f 100644 --- a/client.c +++ b/client.c @@ -124,9 +124,6 @@ static bool daemonise (int *pidfd) return (false); } - close (*pidfd); - *pidfd = -1; - return (true); } @@ -696,6 +693,11 @@ eexit: if (buffer) free (buffer); + if (*pidfd != -1) { + close (*pidfd); + *pidfd = -1; + } + logger (LOG_INFO, "exiting"); /* Unlink our pidfile */ diff --git a/dhcpcd.c b/dhcpcd.c index 09e4b43e..86f2ab7c 100644 --- a/dhcpcd.c +++ b/dhcpcd.c @@ -389,12 +389,12 @@ int main(int argc, char **argv) } if ((pid = read_pid (options.pidfile)) > 0 && kill (pid, 0) == 0) { - logger (LOG_ERR, ""PACKAGE" already running (%s)", options.pidfile); + logger (LOG_ERR, ""PACKAGE" already running on pid %d (%s)", + pid, options.pidfile); exit (EXIT_FAILURE); } - pidfd = open (options.pidfile, - O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, 0660); + pidfd = open (options.pidfile, O_WRONLY | O_CREAT | O_NONBLOCK, 0660); if (pidfd == -1) { logger (LOG_ERR, "open `%s': %s", options.pidfile, strerror (errno)); exit (EXIT_FAILURE); @@ -406,6 +406,11 @@ int main(int argc, char **argv) exit (EXIT_FAILURE); } + /* dhcpcd.sh should not interhit this fd */ + if ((i = fcntl (pidfd, F_GETFD, 0)) < 0 || + fcntl (pidfd, F_SETFD, i | FD_CLOEXEC) < 0) + logger (LOG_ERR, "fcntl: %s", strerror (errno)); + logger (LOG_INFO, PACKAGE " " VERSION " starting"); if (dhcp_run (&options, &pidfd)) { if (pidfd > -1)