]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Reset cached \Recent flags if UIDVALIDITY changes, because we were using
authorTimo Sirainen <tss@iki.fi>
Thu, 24 Apr 2008 22:49:39 +0000 (01:49 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 24 Apr 2008 22:49:39 +0000 (01:49 +0300)
UIDs in the cache.

--HG--
branch : HEAD

src/lib-storage/index/dbox/dbox-sync-rebuild.c
src/lib-storage/index/index-storage.h
src/lib-storage/index/index-sync.c
src/lib-storage/index/maildir/maildir-sync-index.c
src/lib-storage/index/mbox/mbox-sync.c

index 8e827a3aba81fbcc3c3fd7ccbab9451c5f489bff..f683dedfc89591f6a3ea785fac362738bbf5bdec 100644 (file)
@@ -413,6 +413,7 @@ int dbox_sync_index_rebuild(struct dbox_mailbox *mbox)
                                        MAIL_INDEX_TRANSACTION_FLAG_EXTERNAL);
        i_array_init(&ctx.maildir_new_files, 8);
        mail_index_reset(ctx.trans);
+       index_mailbox_reset_uidvalidity(&mbox->ibox);
        mail_index_ext_lookup(mbox->ibox.index, "cache", &ctx.cache_ext_id);
 
        if ((ret = dbox_sync_index_rebuild_ctx(&ctx)) < 0)
index 758bfc520d4323f27544308e2e3e8f84bca9879b..9b264fd844f79cee04ca8f46d1427452504a4417 100644 (file)
@@ -121,6 +121,7 @@ void index_mailbox_set_recent_seq(struct index_mailbox *ibox,
                                  uint32_t seq1, uint32_t seq2);
 bool index_mailbox_is_recent(struct index_mailbox *ibox, uint32_t uid);
 unsigned int index_mailbox_get_recent_count(struct index_mailbox *ibox);
+void index_mailbox_reset_uidvalidity(struct index_mailbox *ibox);
 
 void index_mailbox_check_add(struct index_mailbox *ibox,
                             const char *path);
index bb0302d58cca54c14a9eaee877a471e92716907b..7bbb4fc58a4f1bb071d15b7b0d6c6bdbec5f085c 100644 (file)
@@ -63,6 +63,14 @@ bool index_mailbox_is_recent(struct index_mailbox *ibox, uint32_t uid)
                seq_range_exists(&ibox->recent_flags, uid);
 }
 
+void index_mailbox_reset_uidvalidity(struct index_mailbox *ibox)
+{
+       /* can't trust the currently cached recent flags anymore */
+       array_clear(&ibox->recent_flags);
+       ibox->recent_flags_count = 0;
+       ibox->recent_flags_prev_uid = 0;
+}
+
 unsigned int index_mailbox_get_recent_count(struct index_mailbox *ibox)
 {
        const struct mail_index_header *hdr;
index ba3d3e2dce207c5255803f26f6fa3d91b8b25cdb..8bac61a35c97f7f849b9a90b8208cfdf87feb15a 100644 (file)
@@ -289,6 +289,7 @@ int maildir_sync_index(struct maildir_index_sync_context *ctx,
                i_warning("Maildir %s: UIDVALIDITY changed (%u -> %u)",
                          mbox->path, hdr->uid_validity, uid_validity);
                mail_index_reset(trans);
+               index_mailbox_reset_uidvalidity(&mbox->ibox);
                maildir_uidlist_set_next_uid(mbox->uidlist, 1, TRUE);
 
                memset(&empty_hdr, 0, sizeof(empty_hdr));
index 1b20298a76e87f7d952a8695c6b7f0b7abac6252..789291ace3069fef8bb2316fb0c68f61e19a4172 100644 (file)
@@ -1441,6 +1441,7 @@ static void mbox_sync_restart(struct mbox_sync_context *sync_ctx)
                mail_index_reset(sync_ctx->t);
                sync_ctx->reset_hdr.next_uid = 1;
                sync_ctx->hdr = &sync_ctx->reset_hdr;
+               index_mailbox_reset_uidvalidity(&sync_ctx->mbox->ibox);
        }
 
        sync_ctx->prev_msg_uid = 0;