]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Memory leak fixes.
authorTimo Sirainen <tss@iki.fi>
Thu, 13 Jun 2013 00:26:22 +0000 (03:26 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 13 Jun 2013 00:26:22 +0000 (03:26 +0300)
src/doveadm/client-connection.c
src/doveadm/dsync/dsync-brain-mailbox.c
src/doveadm/dsync/dsync-brain.c
src/doveadm/dsync/dsync-ibc-pipe.c
src/doveadm/dsync/dsync-mailbox-export.c
src/doveadm/main.c
src/lib-fs/fs-api.c

index 08c3a874b09a839d04b37f4bbeaad445f6557770..ce4e6aeea300c6b96b2f9f649b7e8a6fbae9b0e5 100644 (file)
@@ -74,6 +74,7 @@ doveadm_mail_cmd_server_parse(const char *cmd_name,
                                        "Client sent unknown parameter: %c",
                                        cmd->name, c);
                                ctx->v.deinit(ctx);
+                               pool_unref(&ctx->pool);
                                return NULL;
                        }
                }
@@ -86,6 +87,7 @@ doveadm_mail_cmd_server_parse(const char *cmd_name,
                i_error("doveadm %s: Client sent unknown parameter: %s",
                        cmd->name, argv[0]);
                ctx->v.deinit(ctx);
+               pool_unref(&ctx->pool);
                return NULL;
        }
        ctx->args = (const void *)argv;
index 0d920222bb69f88ba6ff73bb8fc9177622663575..27e8ffabd81d9ce71c9fce8d328eadae3c246677 100644 (file)
@@ -197,6 +197,7 @@ int dsync_brain_sync_mailbox_open(struct dsync_brain *brain,
        uint64_t last_common_modseq, last_common_pvt_modseq;
 
        i_assert(brain->log_scan == NULL);
+       i_assert(brain->box_exporter == NULL);
 
        last_common_uid = brain->mailbox_state.last_common_uid;
        last_common_modseq = brain->mailbox_state.last_common_modseq;
index a6b4bd4c0cb4db4e3958b1ea6be7db2c1cacba5e..e476393a11dec19dc6d20d882001deffe1149deb 100644 (file)
@@ -186,6 +186,8 @@ int dsync_brain_deinit(struct dsync_brain **_brain)
                dsync_brain_sync_mailbox_deinit(brain);
        if (brain->local_tree_iter != NULL)
                dsync_mailbox_tree_iter_deinit(&brain->local_tree_iter);
+       dsync_mailbox_tree_deinit(&brain->local_mailbox_tree);
+       dsync_mailbox_tree_deinit(&brain->remote_mailbox_tree);
        if (brain->mailbox_states_iter != NULL)
                hash_table_iterate_deinit(&brain->mailbox_states_iter);
        hash_table_destroy(&brain->mailbox_states);
index da813122776a944c457d543a281e3edc2a8ce760..6eb3b4c4c6adfbb61820025f1df79502c6d09e0a 100644 (file)
@@ -134,6 +134,7 @@ static bool dsync_ibc_pipe_try_pop_eol(struct dsync_ibc_pipe *pipe)
 static void dsync_ibc_pipe_deinit(struct dsync_ibc *ibc)
 {
        struct dsync_ibc_pipe *pipe = (struct dsync_ibc_pipe *)ibc;
+       struct item *item;
        pool_t *poolp;
 
        if (pipe->remote != NULL) {
@@ -143,6 +144,10 @@ static void dsync_ibc_pipe_deinit(struct dsync_ibc *ibc)
 
        if (pipe->pop_pool != NULL)
                pool_unref(&pipe->pop_pool);
+       array_foreach_modifiable(&pipe->item_queue, item) {
+               if (item->pool != NULL)
+                       pool_unref(&item->pool);
+       }
        array_foreach_modifiable(&pipe->pools, poolp)
                pool_unref(poolp);
        array_free(&pipe->pools);
index 596e6f88871016bf390e474ffdd0bf7d952c0fe4..9914d2d6a812c8a74c74420544e78ea4907dfe75 100644 (file)
@@ -844,6 +844,7 @@ int dsync_mailbox_export_deinit(struct dsync_mailbox_exporter **_exporter,
        if (exporter->attr.value_stream != NULL)
                i_stream_unref(&exporter->attr.value_stream);
        hash_table_destroy(&exporter->export_guids);
+       hash_table_destroy(&exporter->changes);
 
        *error_r = t_strdup(exporter->error);
        pool_unref(&exporter->pool);
index f7191b57ec815e72848ec7ed8b62d486f4112d6c..3e9c48e632bac3e990119af855fe799288afc6d5 100644 (file)
@@ -61,6 +61,7 @@ static void main_deinit(void)
                client_connection_destroy(&doveadm_client);
        doveadm_mail_deinit();
        doveadm_unload_modules();
+       doveadm_print_deinit();
 }
 
 int main(int argc, char *argv[])
index 73f4d3d02d5b0598ffbed97d93ebf2de1b8ee15c..a9fe3aab0cc5355eb6ef9daa442db0a27710feef 100644 (file)
@@ -43,6 +43,11 @@ static void fs_class_register(const struct fs *fs_class)
        array_append(&fs_classes, &fs_class, 1);
 }
 
+static void fs_classes_deinit(void)
+{
+       array_free(&fs_classes);
+}
+
 static void fs_classes_init(void)
 {
        i_array_init(&fs_classes, 8);
@@ -50,6 +55,7 @@ static void fs_classes_init(void)
        fs_class_register(&fs_class_metawrap);
        fs_class_register(&fs_class_sis);
        fs_class_register(&fs_class_sis_queue);
+       lib_atexit(fs_classes_deinit);
 }
 
 static const struct fs *fs_class_find(const char *driver)