Mercurial > dovecot > core-2.2
changeset 22862:dfa00b3e819f
lib-storage: mailbox_list_index_handle_corruption() - Move actual handling to its own function
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 19 Feb 2018 12:53:46 +0200 |
parents | 898ef4d4ee48 |
children | 792f2b19851b |
files | src/lib-storage/list/mailbox-list-index.c |
diffstat | 1 files changed, 23 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index.c Thu Nov 30 12:03:36 2017 +0200 +++ b/src/lib-storage/list/mailbox-list-index.c Mon Feb 19 12:53:46 2018 +0200 @@ -588,12 +588,32 @@ } } +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_corrupted != NULL) { + (*storagep)->list_index_rebuild_reason = reason; + if ((*storagep)->v.list_index_corrupted(*storagep) < 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; @@ -607,20 +627,7 @@ return 0; ilist->handling_corruption = TRUE; - array_foreach(&list->ns->all_storages, storagep) { - if ((*storagep)->v.list_index_corrupted != NULL) { - (*storagep)->list_index_rebuild_reason = reason; - if ((*storagep)->v.list_index_corrupted(*storagep) < 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; }