Mercurial > dovecot > core-2.2
changeset 22760:4b4bddfa51cb
imapc: Handle untagged UIDVALIDITY immediately
This is part of the changes to fix mailbox resyncing after reconnect.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 25 Dec 2017 19:19:09 +0200 |
parents | a83edde46a15 |
children | 26e53481b964 |
files | src/lib-storage/index/imapc/imapc-mailbox.c src/lib-storage/index/imapc/imapc-sync.c |
diffstat | 2 files changed, 21 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-mailbox.c Mon Dec 25 19:34:31 2017 +0200 +++ b/src/lib-storage/index/imapc/imapc-mailbox.c Mon Dec 25 19:19:09 2017 +0200 @@ -589,6 +589,26 @@ imapc_search_reply_esearch(reply->args+1, mbox); } +static void imapc_sync_uid_validity(struct imapc_mailbox *mbox) +{ + const struct mail_index_header *hdr; + + imapc_mailbox_init_delayed_trans(mbox); + hdr = mail_index_get_header(mbox->delayed_sync_view); + if (hdr->uid_validity != mbox->sync_uid_validity && + mbox->sync_uid_validity != 0) { + if (hdr->uid_validity != 0) { + /* uidvalidity changed, reset the entire mailbox */ + mail_index_reset(mbox->delayed_sync_trans); + mbox->sync_fetch_first_uid = 1; + } + mail_index_update_header(mbox->delayed_sync_trans, + offsetof(struct mail_index_header, uid_validity), + &mbox->sync_uid_validity, + sizeof(mbox->sync_uid_validity), TRUE); + } +} + static void imapc_resp_text_uidvalidity(const struct imapc_untagged_reply *reply, struct imapc_mailbox *mbox) @@ -603,6 +623,7 @@ if (mbox->sync_uid_validity != uid_validity) { mbox->sync_uid_validity = uid_validity; imapc_mail_cache_free(&mbox->prev_mail_cache); + imapc_sync_uid_validity(mbox); } }
--- a/src/lib-storage/index/imapc/imapc-sync.c Mon Dec 25 19:34:31 2017 +0200 +++ b/src/lib-storage/index/imapc/imapc-sync.c Mon Dec 25 19:19:09 2017 +0200 @@ -291,26 +291,6 @@ mbox->sync_next_rseq = 0; } -static void imapc_sync_uid_validity(struct imapc_sync_context *ctx) -{ - struct imapc_mailbox *mbox = ctx->mbox; - const struct mail_index_header *hdr; - - hdr = mail_index_get_header(ctx->sync_view); - if (hdr->uid_validity != mbox->sync_uid_validity && - mbox->sync_uid_validity != 0) { - if (hdr->uid_validity != 0) { - /* uidvalidity changed, reset the entire mailbox */ - mail_index_reset(ctx->trans); - mbox->sync_fetch_first_uid = 1; - } - mail_index_update_header(ctx->trans, - offsetof(struct mail_index_header, uid_validity), - &mbox->sync_uid_validity, - sizeof(mbox->sync_uid_validity), TRUE); - } -} - static void imapc_sync_uid_next(struct imapc_sync_context *ctx) { struct imapc_mailbox *mbox = ctx->mbox; @@ -451,7 +431,6 @@ ctx->keywords = mail_index_get_keywords(mbox->box.index); ctx->pool = pool_alloconly_create("imapc sync pool", 1024); - imapc_sync_uid_validity(ctx); while (mail_index_sync_next(ctx->index_sync_ctx, &sync_rec)) T_BEGIN { if (!mail_index_lookup_seq_range(ctx->sync_view, sync_rec.uid1, sync_rec.uid2,