changeset 22760:4b4bddfa51cb

imapc: Handle untagged UIDVALIDITY immediately This is part of the changes to fix mailbox resyncing after reconnect.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 25 Dec 2017 19:19:09 +0200
parents a83edde46a15
children 26e53481b964
files src/lib-storage/index/imapc/imapc-mailbox.c src/lib-storage/index/imapc/imapc-sync.c
diffstat 2 files changed, 21 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mailbox.c	Mon Dec 25 19:34:31 2017 +0200
+++ b/src/lib-storage/index/imapc/imapc-mailbox.c	Mon Dec 25 19:19:09 2017 +0200
@@ -589,6 +589,26 @@
 		imapc_search_reply_esearch(reply->args+1, mbox);
 }
 
+static void imapc_sync_uid_validity(struct imapc_mailbox *mbox)
+{
+	const struct mail_index_header *hdr;
+
+	imapc_mailbox_init_delayed_trans(mbox);
+	hdr = mail_index_get_header(mbox->delayed_sync_view);
+	if (hdr->uid_validity != mbox->sync_uid_validity &&
+	    mbox->sync_uid_validity != 0) {
+		if (hdr->uid_validity != 0) {
+			/* uidvalidity changed, reset the entire mailbox */
+			mail_index_reset(mbox->delayed_sync_trans);
+			mbox->sync_fetch_first_uid = 1;
+		}
+		mail_index_update_header(mbox->delayed_sync_trans,
+			offsetof(struct mail_index_header, uid_validity),
+			&mbox->sync_uid_validity,
+			sizeof(mbox->sync_uid_validity), TRUE);
+	}
+}
+
 static void
 imapc_resp_text_uidvalidity(const struct imapc_untagged_reply *reply,
 			    struct imapc_mailbox *mbox)
@@ -603,6 +623,7 @@
 	if (mbox->sync_uid_validity != uid_validity) {
 		mbox->sync_uid_validity = uid_validity;
 		imapc_mail_cache_free(&mbox->prev_mail_cache);
+		imapc_sync_uid_validity(mbox);
 	}
 }
 
--- a/src/lib-storage/index/imapc/imapc-sync.c	Mon Dec 25 19:34:31 2017 +0200
+++ b/src/lib-storage/index/imapc/imapc-sync.c	Mon Dec 25 19:19:09 2017 +0200
@@ -291,26 +291,6 @@
 	mbox->sync_next_rseq = 0;
 }
 
-static void imapc_sync_uid_validity(struct imapc_sync_context *ctx)
-{
-	struct imapc_mailbox *mbox = ctx->mbox;
-	const struct mail_index_header *hdr;
-
-	hdr = mail_index_get_header(ctx->sync_view);
-	if (hdr->uid_validity != mbox->sync_uid_validity &&
-	    mbox->sync_uid_validity != 0) {
-		if (hdr->uid_validity != 0) {
-			/* uidvalidity changed, reset the entire mailbox */
-			mail_index_reset(ctx->trans);
-			mbox->sync_fetch_first_uid = 1;
-		}
-		mail_index_update_header(ctx->trans,
-			offsetof(struct mail_index_header, uid_validity),
-			&mbox->sync_uid_validity,
-			sizeof(mbox->sync_uid_validity), TRUE);
-	}
-}
-
 static void imapc_sync_uid_next(struct imapc_sync_context *ctx)
 {
 	struct imapc_mailbox *mbox = ctx->mbox;
@@ -451,7 +431,6 @@
 	ctx->keywords = mail_index_get_keywords(mbox->box.index);
 	ctx->pool = pool_alloconly_create("imapc sync pool", 1024);
 
-	imapc_sync_uid_validity(ctx);
 	while (mail_index_sync_next(ctx->index_sync_ctx, &sync_rec)) T_BEGIN {
 		if (!mail_index_lookup_seq_range(ctx->sync_view,
 						 sync_rec.uid1, sync_rec.uid2,