Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7463:d1bd08d468d0 HEAD
Reset cached \Recent flags if UIDVALIDITY changes, because we were using
UIDs in the cache.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 25 Apr 2008 01:49:39 +0300 |
parents | 068f6eefc62b |
children | 4dc5542f58aa |
files | 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 |
diffstat | 5 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-sync-rebuild.c Fri Apr 25 01:31:05 2008 +0300 +++ b/src/lib-storage/index/dbox/dbox-sync-rebuild.c Fri Apr 25 01:49:39 2008 +0300 @@ -413,6 +413,7 @@ 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)
--- a/src/lib-storage/index/index-storage.h Fri Apr 25 01:31:05 2008 +0300 +++ b/src/lib-storage/index/index-storage.h Fri Apr 25 01:49:39 2008 +0300 @@ -121,6 +121,7 @@ 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);
--- a/src/lib-storage/index/index-sync.c Fri Apr 25 01:31:05 2008 +0300 +++ b/src/lib-storage/index/index-sync.c Fri Apr 25 01:49:39 2008 +0300 @@ -63,6 +63,14 @@ 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;
--- a/src/lib-storage/index/maildir/maildir-sync-index.c Fri Apr 25 01:31:05 2008 +0300 +++ b/src/lib-storage/index/maildir/maildir-sync-index.c Fri Apr 25 01:49:39 2008 +0300 @@ -289,6 +289,7 @@ 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));
--- a/src/lib-storage/index/mbox/mbox-sync.c Fri Apr 25 01:31:05 2008 +0300 +++ b/src/lib-storage/index/mbox/mbox-sync.c Fri Apr 25 01:49:39 2008 +0300 @@ -1441,6 +1441,7 @@ 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;