]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Allow only one controller process to manage rrd file.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 19 Sep 2015 20:40:07 +0000 (21:40 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 21 Sep 2015 10:41:46 +0000 (11:41 +0100)
src/controller.c
src/main.c
src/main.h

index 646af0debe036a0178dfe46d0b8c64dc0962247c..6ad1f4d63feeecd4a71a6b02cdfd8e1f485145b1 100644 (file)
@@ -2254,7 +2254,7 @@ start_controller_worker (struct rspamd_worker *worker)
        rspamd_controller_load_saved_stats (ctx);
 
        /* RRD collector */
-       if (ctx->cfg->rrd_file) {
+       if (ctx->cfg->rrd_file && worker->index == 0) {
                ctx->rrd = rspamd_rrd_file_default (ctx->cfg->rrd_file, NULL);
 
                if (ctx->rrd) {
@@ -2264,6 +2264,9 @@ start_controller_worker (struct rspamd_worker *worker)
                        event_add (ctx->rrd_event, &rrd_update_time);
                }
        }
+       else {
+               ctx->rrd = NULL;
+       }
 
        rspamd_controller_password_sane (ctx, ctx->password, "normal password");
        rspamd_controller_password_sane (ctx, ctx->enable_password, "enable "
index 1686c39b49e0f09a388a4cd4ee34ff91c6155797..8b8f02f1483291f836081e9092d0e85e08ef1451 100644 (file)
@@ -73,7 +73,7 @@
 #define HARD_TERMINATION_TIME 10
 
 static struct rspamd_worker * fork_worker (struct rspamd_main *,
-       struct rspamd_worker_conf *);
+       struct rspamd_worker_conf *, guint);
 static gboolean load_rspamd_config (struct rspamd_config *cfg,
        gboolean init_modules);
 
@@ -449,7 +449,8 @@ set_worker_limits (struct rspamd_worker_conf *cf)
 }
 
 static struct rspamd_worker *
-fork_worker (struct rspamd_main *rspamd, struct rspamd_worker_conf *cf)
+fork_worker (struct rspamd_main *rspamd, struct rspamd_worker_conf *cf,
+               guint index)
 {
        struct rspamd_worker *cur;
        /* Starting worker process */
@@ -461,7 +462,7 @@ fork_worker (struct rspamd_main *rspamd, struct rspamd_worker_conf *cf)
                cur->pid = fork ();
                cur->cf = g_malloc (sizeof (struct rspamd_worker_conf));
                memcpy (cur->cf, cf, sizeof (struct rspamd_worker_conf));
-               cur->pending = FALSE;
+               cur->index = index;
                cur->ctx = cf->ctx;
                switch (cur->pid) {
                case 0:
@@ -611,7 +612,7 @@ fork_delayed (struct rspamd_main *rspamd)
                cf = cur->data;
 
                workers_pending = g_list_remove_link (workers_pending, cur);
-               fork_worker (rspamd, cf);
+               fork_worker (rspamd, cf, cf->count);
                g_list_free_1 (cur);
        }
 }
@@ -708,14 +709,14 @@ spawn_workers (struct rspamd_main *rspamd)
                                                msg_warn_main ("cannot spawn more than 1 %s worker, so spawn one",
                                                                cf->worker->name);
                                        }
-                                       fork_worker (rspamd, cf);
+                                       fork_worker (rspamd, cf, 0);
                                }
                                else if (cf->worker->threaded) {
-                                       fork_worker (rspamd, cf);
+                                       fork_worker (rspamd, cf, 0);
                                }
                                else {
                                        for (i = 0; i < cf->count; i++) {
-                                               fork_worker (rspamd, cf);
+                                               fork_worker (rspamd, cf, i);
                                        }
                                }
                        }
index 9b1f928b9a53fe6de012046b29c3b27bb267f629..5104040a9114f45277f9c59810ec8e70b6473cf1 100644 (file)
@@ -44,9 +44,7 @@
  */
 struct rspamd_worker {
        pid_t pid;                                                  /**< pid of worker                                                                  */
-       gboolean is_initialized;                                    /**< is initialized                                                                 */
-       gboolean is_dying;                                          /**< if worker is going to shutdown                                 */
-       gboolean pending;                                           /**< if worker is pending to run                                    */
+       guint index;                                                /**< index number                                                                   */
        struct rspamd_main *srv;                                    /**< pointer to server structure                                    */
        GQuark type;                                                /**< process type                                                                   */
        GHashTable *signal_events;                                                                      /**< signal events                                                                      */