]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: If LAYOUT=index loses mailbox names, write the generated ones to index.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 15 Nov 2016 22:57:06 +0000 (00:57 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 18 Nov 2016 11:45:18 +0000 (13:45 +0200)
Previously it just kept complaining and regenerating new names, without
actually fixing up the situation.

src/lib-storage/list/mailbox-list-index-sync.c
src/lib-storage/list/mailbox-list-index.c
src/lib-storage/list/mailbox-list-index.h

index e5d73253abd37d1622dcdced8b218cd55856f521..13d3f6331e18f992f2c718552279d769bdd2087b 100644 (file)
@@ -334,11 +334,13 @@ mailbox_list_index_sync_list(struct mailbox_list_index_sync_context *sync_ctx)
 static void
 mailbox_list_index_sync_update_hdr(struct mailbox_list_index_sync_context *sync_ctx)
 {
-       if (sync_ctx->orig_highest_name_id != sync_ctx->ilist->highest_name_id) {
+       if (sync_ctx->orig_highest_name_id != sync_ctx->ilist->highest_name_id ||
+           sync_ctx->ilist->corrupted) {
                /* new names added. this implicitly resets refresh flag */
                T_BEGIN {
                        mailbox_list_index_sync_names(sync_ctx);
                } T_END;
+               sync_ctx->ilist->corrupted = FALSE;
        } else if (mailbox_list_index_need_refresh(sync_ctx->ilist,
                                                   sync_ctx->view)) {
                /* we're synced, reset refresh flag */
index 61d6fc8f9260b92ec2630d6ad22527019adc37f4..47a0a1f56cf1b424ec4f76bdb8fdcd00eded06ab 100644 (file)
@@ -383,6 +383,7 @@ int mailbox_list_index_parse(struct mailbox_list *list,
                        mail_index_mark_corrupted(ilist->index);
                        return -1;
                }
+               ilist->corrupted = TRUE;
        }
        if (mailbox_list_index_parse_records(ilist, view, &error) < 0) {
                mailbox_list_set_critical(list,
@@ -394,6 +395,7 @@ int mailbox_list_index_parse(struct mailbox_list *list,
                }
                /* FIXME: find any missing mailboxes, add them and write the
                   index back. */
+               ilist->corrupted = TRUE;
        }
        return 0;
 }
index 6fe9ccd2985d53a7a6e834ec58762f38103afa4a..ba274c472dc903ba253a567b26ad348d4e2de6c3 100644 (file)
@@ -113,6 +113,7 @@ struct mailbox_list_index {
        unsigned int updating_status:1;
        unsigned int has_backing_store:1;
        unsigned int index_last_check_changed:1;
+       unsigned int corrupted:1;
 };
 
 struct mailbox_list_index_iterate_context {