]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fix errors when handling UIDVALIDITY change
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 12 Mar 2018 13:29:48 +0000 (15:29 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 12 Mar 2018 14:14:47 +0000 (16:14 +0200)
This mainly happened when imapc was used with index files and the backend
IMAP server recreated the mailbox. This caused errors like:
Expunged message uid=1 reappeared - reconnecting

src/lib-storage/index/imapc/imapc-mailbox.c

index 42bedcaf3cd862a5b0ef7653cec2011466e3182d..b1f5cca44ebbf50d47fc0defd0cded4a87e57e87 100644 (file)
@@ -727,6 +727,12 @@ static void imapc_sync_uid_validity(struct imapc_mailbox *mbox)
                        /* uidvalidity changed, reset the entire mailbox */
                        mail_index_reset(mbox->delayed_sync_trans);
                        mbox->sync_fetch_first_uid = 1;
+                       /* The reset needs to be committed before FETCH 1:*
+                          results are received. */
+                       bool changes;
+                       if (imapc_mailbox_commit_delayed_trans(mbox, &changes) < 0)
+                               mail_index_mark_corrupted(mbox->box.index);
+                       imapc_mailbox_init_delayed_trans(mbox);
                }
                mail_index_update_header(mbox->delayed_sync_trans,
                        offsetof(struct mail_index_header, uid_validity),