From: Aki Tuomi Date: Fri, 6 Oct 2023 06:59:38 +0000 (+0300) Subject: virtual: Add and use virtual_sync_deinit() to free the context X-Git-Tag: 2.4.0~2521 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=382425c927c730ff037afec2da0435c5f7d81d43;p=thirdparty%2Fdovecot%2Fcore.git virtual: Add and use virtual_sync_deinit() to free the context This makes sure the memory is always freed. --- diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 40e221fb2d..46da8fb0ef 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -1798,6 +1798,19 @@ virtual_sync_apply_existing_expunges(struct virtual_mailbox *mbox, } } +static void virtual_sync_deinit(struct virtual_sync_context **_ctx) +{ + struct virtual_sync_context *ctx = *_ctx; + if (ctx == NULL) + return; + *_ctx = NULL; + + array_free(&ctx->sync_expunges); + array_free(&ctx->all_adds); + array_free(&ctx->all_mails); + i_free(ctx); +} + static int virtual_sync_mail_mailbox_cmp(const struct virtual_sync_mail *m1, const struct virtual_sync_mail *m2) { @@ -1876,9 +1889,6 @@ static int virtual_sync_backend_boxes(struct virtual_sync_context *ctx) i_assert(uidmap->virtual_uid > 0); } #endif - array_free(&ctx->all_adds); - if (array_is_created(&ctx->all_mails)) - array_free(&ctx->all_mails); return ret; } @@ -1917,7 +1927,7 @@ static int virtual_sync_finish(struct virtual_sync_context *ctx, bool success) } mail_index_sync_rollback(&ctx->index_sync_ctx); } - i_free(ctx); + virtual_sync_deinit(&ctx); return ret; } @@ -1951,7 +1961,7 @@ static int virtual_sync(struct virtual_mailbox *mbox, if (ret <= 0) { if (ret < 0) mailbox_set_index_error(&mbox->box); - i_free(ctx); + virtual_sync_deinit(&ctx); return ret; }