aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-18 18:54:31 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-18 18:54:31 +0000
commitf3164efecab37a350abd79ad350840caaf6eb8f1 (patch)
tree441ace3b44712ff77db62da90c01154520f12b27 /src/libserver
parent87be736a89369f4c746e5a97352000eceaabac3a (diff)
downloadrspamd-f3164efecab37a350abd79ad350840caaf6eb8f1.tar.gz
rspamd-f3164efecab37a350abd79ad350840caaf6eb8f1.zip
[Fix] Further memory leaks fixes
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/cfg_rcl.c4
-rw-r--r--src/libserver/cfg_utils.c3
-rw-r--r--src/libserver/re_cache.c5
3 files changed, 8 insertions, 4 deletions
diff --git a/src/libserver/cfg_rcl.c b/src/libserver/cfg_rcl.c
index d3021570e..8a72a8dd2 100644
--- a/src/libserver/cfg_rcl.c
+++ b/src/libserver/cfg_rcl.c
@@ -586,7 +586,7 @@ rspamd_rcl_worker_handler (rspamd_mempool_t *pool, const ucl_object_t *obj,
qtype = g_quark_try_string (worker_type);
if (qtype != 0) {
wrk = rspamd_config_new_worker (cfg, NULL);
- wrk->options = ucl_object_ref (obj);
+ wrk->options = ucl_object_copy (obj);
wrk->worker = rspamd_get_worker_by_type (cfg, qtype);
if (wrk->worker == NULL) {
@@ -1588,7 +1588,7 @@ rspamd_rcl_neighbours_handler (rspamd_mempool_t *pool,
}
neigh = ucl_object_typed_new (UCL_OBJECT);
- ucl_object_insert_key (neigh, ucl_object_ref (hostval), "host", 0, false);
+ ucl_object_insert_key (neigh, ucl_object_copy (hostval), "host", 0, false);
if ((p = strrchr (ucl_object_tostring (hostval), ':')) != NULL) {
if (g_ascii_isdigit (p[1])) {
diff --git a/src/libserver/cfg_utils.c b/src/libserver/cfg_utils.c
index 12a13cd9b..e6b29edf8 100644
--- a/src/libserver/cfg_utils.c
+++ b/src/libserver/cfg_utils.c
@@ -942,8 +942,7 @@ static void
rspamd_worker_conf_dtor (struct rspamd_worker_conf *wcf)
{
if (wcf) {
- /* XXX: fix reload memory leak somehow */
- /* ucl_object_unref (wcf->options); */
+ ucl_object_unref (wcf->options);
g_queue_free (wcf->active_workers);
g_hash_table_unref (wcf->params);
g_slice_free1 (sizeof (*wcf), wcf);
diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c
index e5298ff04..8d914c93a 100644
--- a/src/libserver/re_cache.c
+++ b/src/libserver/re_cache.c
@@ -154,6 +154,11 @@ rspamd_re_cache_destroy (struct rspamd_re_cache *cache)
re_class = v;
g_hash_table_iter_steal (&it);
g_hash_table_unref (re_class->re);
+
+ if (re_class->type_data) {
+ g_slice_free1 (re_class->type_len, re_class->type_data);
+ }
+
#ifdef WITH_HYPERSCAN
if (re_class->hs_db) {
hs_free_database (re_class->hs_db);