commit 046a4a1: [Fix] Do not use config pool to avoid issues with double reload
Vsevolod Stakhov
vsevolod at highsecure.ru
Thu Oct 3 15:00:06 UTC 2019
Author: Vsevolod Stakhov
Date: 2019-10-03 15:23:02 +0100
URL: https://github.com/rspamd/rspamd/commit/046a4a15092f741350a6be24b769ea5562572af1
[Fix] Do not use config pool to avoid issues with double reload
---
src/libserver/cfg_utils.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c
index dd2578c91..2d4da27ac 100644
--- a/src/libserver/cfg_utils.c
+++ b/src/libserver/cfg_utils.c
@@ -83,9 +83,7 @@ rspamd_parse_bind_line (struct rspamd_config *cfg,
return FALSE;
}
- cnf =
- rspamd_mempool_alloc0 (cfg->cfg_pool,
- sizeof (struct rspamd_worker_bind_conf));
+ cnf = g_malloc0 (sizeof (struct rspamd_worker_bind_conf));
cnf->cnt = 1024;
cnf->bind_line = str;
@@ -94,10 +92,10 @@ rspamd_parse_bind_line (struct rspamd_config *cfg,
/* The actual socket will be passed by systemd environment */
cnf->is_systemd = TRUE;
cnf->cnt = strtoul (str + sizeof ("systemd:") - 1, &err, 10);
- cnf->addrs = NULL;
+ cnf->addrs = g_ptr_array_new ();
if (err == NULL || *err == '\0') {
- cnf->name = rspamd_mempool_strdup (cfg->cfg_pool, str);
+ cnf->name = g_strdup (str);
LL_PREPEND (cf->bind_conf, cnf);
}
else {
@@ -107,7 +105,7 @@ rspamd_parse_bind_line (struct rspamd_config *cfg,
}
else {
if (rspamd_parse_host_port_priority (str, &cnf->addrs,
- NULL, &cnf->name, DEFAULT_BIND_PORT, cfg->cfg_pool) == RSPAMD_PARSE_ADDR_FAIL) {
+ NULL, &cnf->name, DEFAULT_BIND_PORT, NULL) == RSPAMD_PARSE_ADDR_FAIL) {
msg_err_config ("cannot parse bind line: %s", str);
ret = FALSE;
}
@@ -117,6 +115,15 @@ rspamd_parse_bind_line (struct rspamd_config *cfg,
}
}
+ if (!ret) {
+ if (cnf->addrs) {
+ g_ptr_array_free (cnf->addrs, TRUE);
+ }
+
+ g_free (cnf->name);
+ g_free (cnf);
+ }
+
return ret;
}
@@ -1066,6 +1073,14 @@ static void
rspamd_worker_conf_dtor (struct rspamd_worker_conf *wcf)
{
if (wcf) {
+ struct rspamd_worker_bind_conf *cnf, *tmp;
+
+ LL_FOREACH_SAFE (wcf->bind_conf, cnf, tmp) {
+ g_free (cnf->name);
+ g_ptr_array_free (cnf->addrs, TRUE);
+ g_free (cnf);
+ }
+
ucl_object_unref (wcf->options);
g_queue_free (wcf->active_workers);
g_hash_table_unref (wcf->params);
More information about the Commits
mailing list