dovecot-1.1: Reset cached \Recent flags if UIDVALIDITY changes, ...

dovecot at dovecot.org dovecot at dovecot.org
Fri Apr 25 01:49:43 EEST 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/d1bd08d468d0
changeset: 7463:d1bd08d468d0
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Apr 25 01:49:39 2008 +0300
description:
Reset cached \Recent flags if UIDVALIDITY changes, because we were using
UIDs in the cache.

diffstat:

5 files changed, 12 insertions(+)
src/lib-storage/index/dbox/dbox-sync-rebuild.c     |    1 +
src/lib-storage/index/index-storage.h              |    1 +
src/lib-storage/index/index-sync.c                 |    8 ++++++++
src/lib-storage/index/maildir/maildir-sync-index.c |    1 +
src/lib-storage/index/mbox/mbox-sync.c             |    1 +

diffs (62 lines):

diff -r 068f6eefc62b -r d1bd08d468d0 src/lib-storage/index/dbox/dbox-sync-rebuild.c
--- 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 @@ int dbox_sync_index_rebuild(struct dbox_
 					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 -r 068f6eefc62b -r d1bd08d468d0 src/lib-storage/index/index-storage.h
--- 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 @@ void index_mailbox_set_recent_seq(struct
 				  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 -r 068f6eefc62b -r d1bd08d468d0 src/lib-storage/index/index-sync.c
--- 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
@@ -61,6 +61,14 @@ bool index_mailbox_is_recent(struct inde
 {
 	return array_is_created(&ibox->recent_flags) &&
 		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)
diff -r 068f6eefc62b -r d1bd08d468d0 src/lib-storage/index/maildir/maildir-sync-index.c
--- 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 @@ int maildir_sync_index(struct maildir_in
 		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 -r 068f6eefc62b -r d1bd08d468d0 src/lib-storage/index/mbox/mbox-sync.c
--- 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 @@ static void mbox_sync_restart(struct mbo
 		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;


More information about the dovecot-cvs mailing list