From: Timo Sirainen Date: Thu, 24 Apr 2008 22:49:39 +0000 (+0300) Subject: Reset cached \Recent flags if UIDVALIDITY changes, because we were using X-Git-Tag: 1.1.rc5~39 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=28b30e9bd1a0a8b9019124abd821cb2989a03910;p=thirdparty%2Fdovecot%2Fcore.git Reset cached \Recent flags if UIDVALIDITY changes, because we were using UIDs in the cache. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/dbox/dbox-sync-rebuild.c b/src/lib-storage/index/dbox/dbox-sync-rebuild.c index 8e827a3aba..f683dedfc8 100644 --- a/src/lib-storage/index/dbox/dbox-sync-rebuild.c +++ b/src/lib-storage/index/dbox/dbox-sync-rebuild.c @@ -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) diff --git a/src/lib-storage/index/index-storage.h b/src/lib-storage/index/index-storage.h index 758bfc520d..9b264fd844 100644 --- a/src/lib-storage/index/index-storage.h +++ b/src/lib-storage/index/index-storage.h @@ -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); diff --git a/src/lib-storage/index/index-sync.c b/src/lib-storage/index/index-sync.c index bb0302d58c..7bbb4fc58a 100644 --- a/src/lib-storage/index/index-sync.c +++ b/src/lib-storage/index/index-sync.c @@ -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; diff --git a/src/lib-storage/index/maildir/maildir-sync-index.c b/src/lib-storage/index/maildir/maildir-sync-index.c index ba3d3e2dce..8bac61a35c 100644 --- a/src/lib-storage/index/maildir/maildir-sync-index.c +++ b/src/lib-storage/index/maildir/maildir-sync-index.c @@ -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)); diff --git a/src/lib-storage/index/mbox/mbox-sync.c b/src/lib-storage/index/mbox/mbox-sync.c index 1b20298a76..789291ace3 100644 --- a/src/lib-storage/index/mbox/mbox-sync.c +++ b/src/lib-storage/index/mbox/mbox-sync.c @@ -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;