]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Further memory leaks fixes
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 18 Jan 2017 18:54:31 +0000 (18:54 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 18 Jan 2017 18:54:31 +0000 (18:54 +0000)
src/libserver/cfg_rcl.c
src/libserver/cfg_utils.c
src/libserver/re_cache.c
src/libutil/upstream.c

index d3021570ecf287deb3f50f9332b59f13eb339ab8..8a72a8dd26211ca04bb773c67718d9db6ca06752 100644 (file)
@@ -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])) {
index 12a13cd9b1b9298c647426b32c6a3726d9d17407..e6b29edf8b95a287d177e3c1a4d67e095e5a8159 100644 (file)
@@ -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);
index e5298ff048a030dcd3282ea2fec447813ff2fe38..8d914c93ab62b39948701c32515a71e12154626e 100644 (file)
@@ -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);
index 4e437d41672daa8c34ed7350c6c28e8b6354270f..48ef08329216ae9227e938defa647b80be2d2615 100644 (file)
@@ -80,6 +80,7 @@ struct upstream_ctx {
        guint dns_retransmits;
        GQueue *upstreams;
        gboolean configured;
+       rspamd_mempool_t *pool;
        ref_entry_t ref;
 };
 
@@ -144,6 +145,7 @@ rspamd_upstream_ctx_dtor (struct upstream_ctx *ctx)
        }
 
        g_queue_free (ctx->upstreams);
+       rspamd_mempool_delete (ctx->pool);
        g_slice_free1 (sizeof (*ctx), ctx);
 }
 
@@ -165,6 +167,8 @@ rspamd_upstreams_library_init (void)
        ctx->dns_timeout = default_dns_timeout;
        ctx->revive_jitter = default_revive_jitter;
        ctx->revive_time = default_revive_time;
+       ctx->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (),
+                       "upstreams");
 
        ctx->upstreams = g_queue_new ();
        REF_INIT_RETAIN (ctx, rspamd_upstream_ctx_dtor);
@@ -549,7 +553,8 @@ rspamd_upstreams_add_upstream (struct upstream_list *ups,
 
        if (!rspamd_parse_host_port_priority (str, &addrs,
                        &up->weight,
-                       &up->name, def_port, NULL)) {
+                       &up->name, def_port, ups->ctx->pool)) {
+
                g_slice_free1 (sizeof (*up), up);
                return FALSE;
        }
@@ -558,8 +563,6 @@ rspamd_upstreams_add_upstream (struct upstream_list *ups,
                        addr = g_ptr_array_index (addrs, i);
                        rspamd_upstream_add_addr (up, rspamd_inet_address_copy (addr));
                }
-
-               g_ptr_array_free (addrs, TRUE);
        }
 
        if (up->weight == 0 && ups->rot_alg == RSPAMD_UPSTREAM_MASTER_SLAVE) {