Better fix for pidfile.
[apps/pfixtools.git] / common / common.c
index 3688c9d..3d2862f 100644 (file)
 sig_atomic_t sigint  = false;
 sig_atomic_t sighup  = false;
 
+bool daemon_process  = true;
+int  log_level       = LOG_INFO;
+
 static FILE *pidfile = NULL;
 
 void common_sighandler(int sig)
 {
     switch (sig) {
+      case SIGTERM:
       case SIGINT:
         sigint = true;
         return;
@@ -58,7 +62,7 @@ void common_sighandler(int sig)
         return;
 
       default:
-        syslog(LOG_ERR, "Killed (got signal %d)...", sig);
+        err("Killed (got signal %d)...", sig);
         exit(-1);
     }
 }
@@ -193,10 +197,13 @@ int daemon_detach(void)
     open("/dev/null", O_RDWR);
 
     pid = fork();
-    if (pid < 0)
+    if (pid < 0) {
         return -1;
-    if (pid)
+    }
+    if (pid) {
+        daemon_process = false;
         exit(0);
+    }
 
     setsid();
     return 0;
@@ -253,8 +260,10 @@ int pidfile_refresh(void)
 static void pidfile_close(void)
 {
     if (pidfile) {
-        rewind(pidfile);
-        ftruncate(fileno(pidfile), 0);
+        if (daemon_process) {
+            rewind(pidfile);
+            ftruncate(fileno(pidfile), 0);
+        }
         fclose(pidfile);
         pidfile = NULL;
     }
@@ -264,17 +273,17 @@ int common_setup(const char* pidfilename, bool unsafe, const char* runas_user,
                  const char* runas_group, bool daemonize)
 {
     if (pidfile_open(pidfilename) < 0) {
-        syslog(LOG_CRIT, "unable to write pidfile %s", pidfilename);
+        crit("unable to write pidfile %s", pidfilename);
         return EXIT_FAILURE;
     }
 
     if (!unsafe && drop_privileges(runas_user, runas_group) < 0) {
-        syslog(LOG_CRIT, "unable to drop privileges");
+        crit("unable to drop privileges");
         return EXIT_FAILURE;
     }
 
     if (daemonize && daemon_detach() < 0) {
-        syslog(LOG_CRIT, "unable to fork");
+        crit("unable to fork");
         return EXIT_FAILURE;
     }
 
@@ -287,9 +296,10 @@ extern exitcall_t __madexit[];
 
 static void common_shutdown(void)
 {
-    syslog(LOG_INFO, "Stopping...");
+    if (daemon_process) {
+        info("stopping...");
+    }
     pidfile_close();
-
     for (int i = -1; __madexit[i]; i--) {
         (*__madexit[i])();
     }