diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-01-18 18:54:31 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-01-18 18:54:31 +0000 |
commit | f3164efecab37a350abd79ad350840caaf6eb8f1 (patch) | |
tree | 441ace3b44712ff77db62da90c01154520f12b27 /src/libserver | |
parent | 87be736a89369f4c746e5a97352000eceaabac3a (diff) | |
download | rspamd-f3164efecab37a350abd79ad350840caaf6eb8f1.tar.gz rspamd-f3164efecab37a350abd79ad350840caaf6eb8f1.zip |
[Fix] Further memory leaks fixes
Diffstat (limited to 'src/libserver')
-rw-r--r-- | src/libserver/cfg_rcl.c | 4 | ||||
-rw-r--r-- | src/libserver/cfg_utils.c | 3 | ||||
-rw-r--r-- | src/libserver/re_cache.c | 5 |
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); |