From: Aki Tuomi Date: Mon, 9 Aug 2021 11:23:13 +0000 (+0300) Subject: lib-storage: dbox - Use mailbox_list_index_rebuild X-Git-Tag: 2.3.17~143 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a92541c5b9a72cc238189a70bf27acaf56f0d680;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: dbox - Use mailbox_list_index_rebuild --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index df2bce551d..eff2a27cc4 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -465,7 +465,7 @@ struct mail_storage mdbox_storage = { mdbox_storage_autodetect, mdbox_mailbox_alloc, mdbox_purge, - NULL, + mail_storage_list_index_rebuild, } }; diff --git a/src/lib-storage/index/dbox-multi/mdbox-sync.c b/src/lib-storage/index/dbox-multi/mdbox-sync.c index 595c4d8db7..0c2d2d4ce5 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-sync.c +++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c @@ -319,6 +319,7 @@ int mdbox_sync_begin(struct mdbox_mailbox *mbox, enum mdbox_sync_flags flags, int mdbox_sync_finish(struct mdbox_sync_context **_ctx, bool success) { struct mdbox_sync_context *ctx = *_ctx; + struct mail_storage *storage = &ctx->mbox->storage->storage.storage; int ret = success ? 0 : -1; *_ctx = NULL; @@ -332,6 +333,9 @@ int mdbox_sync_finish(struct mdbox_sync_context **_ctx, bool success) mail_index_sync_rollback(&ctx->index_sync_ctx); } + if (storage->rebuild_list_index) + ret = mail_storage_list_index_rebuild_and_set_uncorrupted(storage); + i_free(ctx); return ret; } diff --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index 4d3fb4a0d9..e43421cb59 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -450,7 +450,7 @@ struct mail_storage sdbox_storage = { sdbox_storage_autodetect, sdbox_mailbox_alloc, NULL, - NULL, + mail_storage_list_index_rebuild, } }; @@ -469,7 +469,7 @@ struct mail_storage dbox_storage = { sdbox_storage_autodetect, sdbox_mailbox_alloc, NULL, - NULL, + mail_storage_list_index_rebuild, } }; diff --git a/src/lib-storage/index/dbox-single/sdbox-sync.c b/src/lib-storage/index/dbox-single/sdbox-sync.c index d7c5b7da16..670b768dec 100644 --- a/src/lib-storage/index/dbox-single/sdbox-sync.c +++ b/src/lib-storage/index/dbox-single/sdbox-sync.c @@ -266,6 +266,7 @@ int sdbox_sync_begin(struct sdbox_mailbox *mbox, enum sdbox_sync_flags flags, int sdbox_sync_finish(struct sdbox_sync_context **_ctx, bool success) { struct sdbox_sync_context *ctx = *_ctx; + struct mail_storage *storage = &ctx->mbox->storage->storage.storage; int ret = success ? 0 : -1; *_ctx = NULL; @@ -284,6 +285,9 @@ int sdbox_sync_finish(struct sdbox_sync_context **_ctx, bool success) mail_index_sync_rollback(&ctx->index_sync_ctx); } + if (storage->rebuild_list_index) + ret = mail_storage_list_index_rebuild_and_set_uncorrupted(storage); + index_storage_expunging_deinit(&ctx->mbox->box); array_free(&ctx->expunged_uids); i_free(ctx); diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index caf34401f8..543620594f 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -9,6 +9,7 @@ #include "str-sanitize.h" #include "mkdir-parents.h" #include "dict.h" +#include "fs-api.h" #include "message-header-parser.h" #include "mail-index-alloc-cache.h" #include "mail-index-private.h" @@ -1127,6 +1128,7 @@ void index_storage_destroy(struct mail_storage *storage) dict_wait(storage->_shared_attr_dict); dict_deinit(&storage->_shared_attr_dict); } + fs_unref(&storage->mailboxes_fs); } static void index_storage_expunging_init(struct mailbox *box)