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