dovecot-1.1: Fixes to handling recent flags with UIDVALIDITY cha...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Apr 25 02:10:39 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/4dc5542f58aa
changeset: 7464:4dc5542f58aa
user: Timo Sirainen <tss at iki.fi>
date: Fri Apr 25 02:10:36 2008 +0300
description:
Fixes to handling recent flags with UIDVALIDITY changing.
diffstat:
2 files changed, 11 insertions(+), 2 deletions(-)
src/lib-storage/index/index-sync.c | 3 ++-
src/lib-storage/index/maildir/maildir-sync-index.c | 10 +++++++++-
diffs (55 lines):
diff -r d1bd08d468d0 -r 4dc5542f58aa src/lib-storage/index/index-sync.c
--- a/src/lib-storage/index/index-sync.c Fri Apr 25 01:49:39 2008 +0300
+++ b/src/lib-storage/index/index-sync.c Fri Apr 25 02:10:36 2008 +0300
@@ -66,7 +66,8 @@ void index_mailbox_reset_uidvalidity(str
void index_mailbox_reset_uidvalidity(struct index_mailbox *ibox)
{
/* can't trust the currently cached recent flags anymore */
- array_clear(&ibox->recent_flags);
+ if (array_is_created(&ibox->recent_flags))
+ array_clear(&ibox->recent_flags);
ibox->recent_flags_count = 0;
ibox->recent_flags_prev_uid = 0;
}
diff -r d1bd08d468d0 -r 4dc5542f58aa src/lib-storage/index/maildir/maildir-sync-index.c
--- a/src/lib-storage/index/maildir/maildir-sync-index.c Fri Apr 25 01:49:39 2008 +0300
+++ b/src/lib-storage/index/maildir/maildir-sync-index.c Fri Apr 25 02:10:36 2008 +0300
@@ -272,6 +272,7 @@ int maildir_sync_index(struct maildir_in
const char *filename;
ARRAY_TYPE(keyword_indexes) idx_keywords;
uint32_t uid_validity, next_uid, hdr_next_uid, first_recent_uid;
+ uint32_t first_uid;
unsigned int changes = 0;
int ret = 0;
bool expunged, full_rescan = FALSE;
@@ -279,6 +280,7 @@ int maildir_sync_index(struct maildir_in
i_assert(!mbox->syncing_commit);
i_assert(maildir_uidlist_is_locked(mbox->uidlist));
+ first_uid = 1;
hdr = mail_index_get_header(view);
uid_validity = maildir_uidlist_get_uid_validity(mbox->uidlist);
if (uid_validity != hdr->uid_validity &&
@@ -292,6 +294,7 @@ int maildir_sync_index(struct maildir_in
index_mailbox_reset_uidvalidity(&mbox->ibox);
maildir_uidlist_set_next_uid(mbox->uidlist, 1, TRUE);
+ first_uid = hdr->messages_count + 1;
memset(&empty_hdr, 0, sizeof(empty_hdr));
empty_hdr.next_uid = 1;
hdr = &empty_hdr;
@@ -439,8 +442,13 @@ int maildir_sync_index(struct maildir_in
appended messages. */
view2 = mail_index_transaction_open_updated_view(trans);
if (mail_index_lookup_seq_range(view2, first_recent_uid, (uint32_t)-1,
- &seq, &seq2))
+ &seq, &seq2) && seq2 >= first_uid) {
+ if (seq < first_uid) {
+ /* UIDVALIDITY changed, skip over the old messages */
+ seq = first_uid;
+ }
index_mailbox_set_recent_seq(&mbox->ibox, view2, seq, seq2);
+ }
mail_index_view_close(&view2);
if (ctx->uidlist_sync_ctx != NULL) {
More information about the dovecot-cvs
mailing list