From f798d6403cab4926b31d8e5a4b72f406d6f46651 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sat, 4 Oct 2008 18:05:03 +0200 Subject: [PATCH] Better fix for pidfile. Signed-off-by: Florent Bruneau --- common/common.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/common/common.c b/common/common.c index 1abb148..3d2862f 100644 --- a/common/common.c +++ b/common/common.c @@ -52,7 +52,7 @@ static FILE *pidfile = NULL; void common_sighandler(int sig) { switch (sig) { - case SIGTERM: + case SIGTERM: case SIGINT: sigint = true; return; @@ -62,7 +62,7 @@ void common_sighandler(int sig) return; default: - err("Killed (got signal %d)...", sig); + err("Killed (got signal %d)...", sig); exit(-1); } } @@ -199,11 +199,11 @@ int daemon_detach(void) pid = fork(); if (pid < 0) { return -1; - } + } if (pid) { - daemon_process = false; + daemon_process = false; exit(0); - } + } setsid(); return 0; @@ -240,7 +240,7 @@ int pidfile_open(const char *name) pidfile = fopen(name, "w"); if (!pidfile) return -1; - fprintf(pidfile, "%d\n", getpid()); + fprintf(pidfile, "%d\n", getpid()); return fflush(pidfile); } return 0; @@ -260,9 +260,11 @@ int pidfile_refresh(void) static void pidfile_close(void) { if (pidfile) { - rewind(pidfile); - ftruncate(fileno(pidfile), 0); - fclose(pidfile); + if (daemon_process) { + rewind(pidfile); + ftruncate(fileno(pidfile), 0); + } + fclose(pidfile); pidfile = NULL; } } @@ -270,6 +272,11 @@ static void pidfile_close(void) int common_setup(const char* pidfilename, bool unsafe, const char* runas_user, const char* runas_group, bool daemonize) { + if (pidfile_open(pidfilename) < 0) { + crit("unable to write pidfile %s", pidfilename); + return EXIT_FAILURE; + } + if (!unsafe && drop_privileges(runas_user, runas_group) < 0) { crit("unable to drop privileges"); return EXIT_FAILURE; @@ -280,11 +287,6 @@ int common_setup(const char* pidfilename, bool unsafe, const char* runas_user, return EXIT_FAILURE; } - if (pidfile_open(pidfilename) < 0) { - crit("unable to write pidfile %s", pidfilename); - return EXIT_FAILURE; - } - pidfile_refresh(); return EXIT_SUCCESS; } @@ -294,10 +296,10 @@ extern exitcall_t __madexit[]; static void common_shutdown(void) { - if (daemon_process) { - info("stopping..."); - pidfile_close(); - } + if (daemon_process) { + info("stopping..."); + } + pidfile_close(); for (int i = -1; __madexit[i]; i--) { (*__madexit[i])(); } -- 2.20.1