From: Timo Sirainen Date: Mon, 19 Feb 2018 10:53:46 +0000 (+0200) Subject: lib-storage: mailbox_list_index_handle_corruption() - Move actual handling to its... X-Git-Tag: 2.3.1~292 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a8bd6c9e9e797e442e0ad21837cdcc788361e293;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mailbox_list_index_handle_corruption() - Move actual handling to its own function --- diff --git a/src/lib-storage/list/mailbox-list-index.c b/src/lib-storage/list/mailbox-list-index.c index 78d0661aa1..db44fc7e2e 100644 --- a/src/lib-storage/list/mailbox-list-index.c +++ b/src/lib-storage/list/mailbox-list-index.c @@ -588,12 +588,31 @@ void mailbox_list_index_refresh_later(struct mailbox_list *list) } } +static int +list_handle_corruption_locked(struct mailbox_list *list, + enum mail_storage_list_index_rebuild_reason reason) +{ + struct mail_storage *const *storagep; + + array_foreach(&list->ns->all_storages, storagep) { + if ((*storagep)->v.list_index_rebuild != NULL) { + if ((*storagep)->v.list_index_rebuild(*storagep, reason) < 0) + return -1; + else { + /* FIXME: implement a generic handler that + just lists mailbox directories in filesystem + and adds the missing ones to the index. */ + } + } + } + return mailbox_list_index_set_uncorrupted(list); +} + int mailbox_list_index_handle_corruption(struct mailbox_list *list) { struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list); - struct mail_storage *const *storagep; enum mail_storage_list_index_rebuild_reason reason; - int ret = 0; + int ret; if (ilist->call_corruption_callback) reason = MAIL_STORAGE_LIST_INDEX_REBUILD_REASON_CORRUPTED; @@ -606,20 +625,7 @@ int mailbox_list_index_handle_corruption(struct mailbox_list *list) if (ilist->handling_corruption) return 0; ilist->handling_corruption = TRUE; - - array_foreach(&list->ns->all_storages, storagep) { - if ((*storagep)->v.list_index_rebuild != NULL) { - if ((*storagep)->v.list_index_rebuild(*storagep, reason) < 0) - ret = -1; - else { - /* FIXME: implement a generic handler that - just lists mailbox directories in filesystem - and adds the missing ones to the index. */ - } - } - } - if (ret == 0) - ret = mailbox_list_index_set_uncorrupted(list); + ret = list_handle_corruption_locked(list, reason); ilist->handling_corruption = FALSE; return ret; }