]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Do not create pid file in no-fork mode
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 27 Mar 2018 13:28:32 +0000 (14:28 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 27 Mar 2018 13:28:32 +0000 (14:28 +0100)
Issue: #2118
Closes: #2118
src/libserver/worker_util.c
src/rspamd.c

index 8b4ca402717b805baa6994fb3f301d1be10bc77f..d2cca5b68884e889af758126f14d2fe125d7860d 100644 (file)
@@ -629,7 +629,11 @@ rspamd_fork_worker (struct rspamd_main *rspamd_main,
                setrlimit (RLIMIT_STACK, &rlim);
 
                setproctitle ("%s process", cf->worker->name);
-               rspamd_pidfile_close (rspamd_main->pfh);
+
+               if (rspamd_main->pfh) {
+                       rspamd_pidfile_close (rspamd_main->pfh);
+               }
+
                /* Do silent log reopen to avoid collisions */
                rspamd_log_close (rspamd_main->logger);
                rspamd_log_open (rspamd_main->logger);
@@ -658,7 +662,11 @@ rspamd_fork_worker (struct rspamd_main *rspamd_main,
                break;
        case -1:
                msg_err_main ("cannot fork main process. %s", strerror (errno));
-               rspamd_pidfile_remove (rspamd_main->pfh);
+
+               if (rspamd_main->pfh) {
+                       rspamd_pidfile_remove (rspamd_main->pfh);
+               }
+
                rspamd_hard_terminate (rspamd_main);
                break;
        default:
index a44f33b6c242d2b8f13e4e70c1d92dca16b1452b..abc15ead9d145d4f9aabed2f2079af003b49bf5a 100644 (file)
@@ -1162,6 +1162,7 @@ main (gint argc, gchar **argv, gchar **env)
        struct event term_ev, int_ev, cld_ev, hup_ev, usr1_ev, control_ev;
        struct timeval term_tv;
        struct rspamd_main *rspamd_main;
+       gboolean skip_pid = FALSE;
 
 #if ((GLIB_MAJOR_VERSION == 2) && (GLIB_MINOR_VERSION <= 30))
        g_thread_init (NULL);
@@ -1348,7 +1349,12 @@ main (gint argc, gchar **argv, gchar **env)
        sigaction (SIGPIPE, &sigpipe_act, NULL);
 
        if (rspamd_main->cfg->pid_file == NULL) {
-               msg_info("pid file is not specified, skipping writing it");
+               msg_info_main ("pid file is not specified, skipping writing it");
+               skip_pid = TRUE;
+       }
+       else if (no_fork) {
+               msg_info_main ("skip writing pid in no-fork mode");
+               skip_pid = TRUE;
        }
        else if (rspamd_write_pid (rspamd_main) == -1) {
                msg_err_main ("cannot write pid file %s", rspamd_main->cfg->pid_file);
@@ -1479,11 +1485,16 @@ main (gint argc, gchar **argv, gchar **env)
        }
 
        msg_info_main ("terminating...");
+
        rspamd_log_close (rspamd_main->logger);
        REF_RELEASE (rspamd_main->cfg);
        g_hash_table_unref (rspamd_main->spairs);
        rspamd_mempool_delete (rspamd_main->server_pool);
-       rspamd_pidfile_close (rspamd_main->pfh);
+
+       if (!skip_pid) {
+               rspamd_pidfile_close (rspamd_main->pfh);
+       }
+
        g_free (rspamd_main);
        event_base_free (ev_base);