]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Fix usage of config during reload
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 28 Nov 2016 12:34:27 +0000 (12:34 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 28 Nov 2016 12:54:39 +0000 (12:54 +0000)
src/controller.c
src/fuzzy_storage.c
src/hs_helper.c
src/log_helper.c
src/lua_worker.c
src/rspamd_proxy.c
src/worker.c

index 7280d995119b5301eea3b4ca2bc5d8f560372455..0d74c019eaf0bff73dd199d9d1a7d83ac6db7ebe 100644 (file)
@@ -2695,6 +2695,7 @@ start_controller_worker (struct rspamd_worker *worker)
        ctx->start_time = time (NULL);
        ctx->worker = worker;
        ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
        ctx->srv = worker->srv;
        ctx->custom_commands = g_hash_table_new (rspamd_strcase_hash,
                        rspamd_strcase_equal);
@@ -2859,5 +2860,7 @@ start_controller_worker (struct rspamd_worker *worker)
                munmap (m, ctx->cached_enable_password.len);
        }
 
+       REF_RELEASE (ctx->cfg);
+
        exit (EXIT_SUCCESS);
 }
index e321aa0b6cf28bb8bc9c204c72e45be2b752f5bc..53839448622f81944e1e30f9be7f68e13777318d 100644 (file)
@@ -2191,7 +2191,11 @@ start_fuzzy (struct rspamd_worker *worker)
                        "fuzzy",
                        NULL);
        ctx->peer_fd = -1;
+       ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
        double_to_tv (ctx->master_timeout, &ctx->master_io_tv);
+  ctx->resolver = dns_resolver_init (worker->srv->logger, ctx->ev_base, worker->srv->cfg);
+  rspamd_upstreams_library_config (worker->srv->cfg, ctx->cfg->ups_ctx, ctx->ev_base, ctx->resolver->r);
 
        /*
         * Open DB and perform VACUUM
@@ -2290,6 +2294,7 @@ start_fuzzy (struct rspamd_worker *worker)
        rspamd_lru_hash_destroy (ctx->errors_ips);
 
        g_hash_table_unref (ctx->keys);
+       REF_RELEASE (ctx->cfg);
 
        exit (EXIT_SUCCESS);
 }
index 2d391936272667b20e24579b70d24e3660d13350..b0ba123d7c7df8a9cc2d2892833ef3d0abf6597c 100644 (file)
@@ -268,6 +268,7 @@ start_hs_helper (struct rspamd_worker *worker)
        double tim;
 
        ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
 
        if (ctx->hs_dir == NULL) {
                ctx->hs_dir = ctx->cfg->hs_cache_dir;
@@ -298,6 +299,7 @@ start_hs_helper (struct rspamd_worker *worker)
        rspamd_worker_block_signals ();
 
        rspamd_log_close (worker->srv->logger);
+       REF_RELEASE (ctx->cfg);
 
        exit (EXIT_SUCCESS);
 }
index a118f1181956f70c10020616322f9c0a8fb8be4c..acb1984b9c18ca85119194e1c8c05c1bab1c2bb8 100644 (file)
@@ -166,6 +166,7 @@ start_log_helper (struct rspamd_worker *worker)
                        "log_helper",
                        NULL);
        ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
        ctx->scripts = worker->cf->scripts;
        ctx->L = ctx->cfg->lua_state;
 
@@ -192,6 +193,7 @@ start_log_helper (struct rspamd_worker *worker)
        rspamd_worker_block_signals ();
 
        rspamd_log_close (worker->srv->logger);
+       REF_RELEASE (ctx->cfg);
 
        exit (EXIT_SUCCESS);
 }
index b74b8d42222143afa2ee8c12615906d7d701bf2c..986fe0b12400d27a5768db13bbff3a330c0efd88 100644 (file)
@@ -355,6 +355,7 @@ start_lua_worker (struct rspamd_worker *worker)
        L = worker->srv->cfg->lua_state;
        ctx->L = L;
        ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
 
        ctx->resolver = dns_resolver_init (worker->srv->logger,
                        ctx->ev_base,
@@ -412,6 +413,7 @@ start_lua_worker (struct rspamd_worker *worker)
        }
 
        rspamd_log_close (worker->srv->logger);
+       REF_RELEASE (ctx->cfg);
        exit (EXIT_SUCCESS);
 }
 
index 917c925ab8789f005a21cfa276442ea9b42550f9..4b11147e02449be14efee8e8bcf9a317d0b09c2b 100644 (file)
@@ -1464,6 +1464,8 @@ start_rspamd_proxy (struct rspamd_worker *worker)
        struct rspamd_proxy_ctx *ctx = worker->ctx;
        struct timeval rot_tv;
 
+       ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
        ctx->ev_base = rspamd_prepare_worker (worker, "rspamd_proxy",
                        proxy_accept_socket);
 
@@ -1498,6 +1500,7 @@ start_rspamd_proxy (struct rspamd_worker *worker)
        }
 
        rspamd_keypair_cache_destroy (ctx->keys_cache);
+       REF_RELEASE (ctx->cfg);
 
        exit (EXIT_SUCCESS);
 }
index 60c39b2af184e16fcaa8c8089b25bb8b8768a061..9bf4dc74c2f8ca0ca3c5d22d57629d0e32cd14bf 100644 (file)
@@ -534,6 +534,8 @@ start_worker (struct rspamd_worker *worker)
        struct rspamd_worker_ctx *ctx = worker->ctx;
        struct rspamd_worker_log_pipe *lp, *ltmp;
 
+       ctx->cfg = worker->srv->cfg;
+       REF_RETAIN (ctx->cfg);
        ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket);
        msec_to_tv (ctx->timeout, &ctx->io_tv);
        rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base);
@@ -579,5 +581,7 @@ start_worker (struct rspamd_worker *worker)
                g_slice_free1 (sizeof (*lp), lp);
        }
 
+       REF_RELEASE (ctx->cfg);
+
        exit (EXIT_SUCCESS);
 }