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;
 }