Mercurial > dovecot > core-2.2
changeset 10731:a3ec94b25456 HEAD
mailbox_update(): Updating uid_validity requires also reseting index.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 15 Feb 2010 06:07:02 +0200 |
parents | 189197f30055 |
children | 8f251e0bc02d |
files | src/lib-storage/index/dbox-multi/mdbox-storage.c src/lib-storage/index/dbox-single/sdbox-storage.c src/lib-storage/index/index-storage.c |
diffstat | 3 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c Mon Feb 15 05:58:11 2010 +0200 +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c Mon Feb 15 06:07:02 2010 +0200 @@ -180,7 +180,6 @@ hdr = mail_index_get_header(box->view); trans = mail_index_transaction_begin(box->view, 0); - mdbox_update_header(mbox, trans, update); uid_validity = hdr->uid_validity; if (update != NULL && update->uid_validity != 0) @@ -191,6 +190,10 @@ } if (hdr->uid_validity != uid_validity) { + if (hdr->uid_validity != 0) { + /* UIDVALIDITY change requires index to be reset */ + mail_index_reset(trans); + } mail_index_update_header(trans, offsetof(struct mail_index_header, uid_validity), &uid_validity, sizeof(uid_validity), TRUE); @@ -208,6 +211,7 @@ update->min_highest_modseq); } + mdbox_update_header(mbox, trans, update); if (mail_index_transaction_commit(&trans) < 0) { mail_storage_set_index_error(box); return -1;
--- a/src/lib-storage/index/dbox-single/sdbox-storage.c Mon Feb 15 05:58:11 2010 +0200 +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c Mon Feb 15 06:07:02 2010 +0200 @@ -117,7 +117,6 @@ hdr = mail_index_get_header(box->view); trans = mail_index_transaction_begin(box->view, 0); - sdbox_update_header(mbox, trans, update); if (update != NULL && update->uid_validity != 0) uid_validity = update->uid_validity; @@ -127,6 +126,10 @@ } if (hdr->uid_validity != uid_validity) { + if (hdr->uid_validity != 0) { + /* UIDVALIDITY change requires index to be reset */ + mail_index_reset(trans); + } mail_index_update_header(trans, offsetof(struct mail_index_header, uid_validity), &uid_validity, sizeof(uid_validity), TRUE); @@ -144,6 +147,7 @@ update->min_highest_modseq); } + sdbox_update_header(mbox, trans, update); if (mail_index_transaction_commit(&trans) < 0) { mail_storage_set_internal_error(box->storage); mail_index_reset_error(box->index);
--- a/src/lib-storage/index/index-storage.c Mon Feb 15 05:58:11 2010 +0200 +++ b/src/lib-storage/index/index-storage.c Mon Feb 15 06:07:02 2010 +0200 @@ -408,6 +408,10 @@ hdr->uid_validity != update->uid_validity) { uint32_t uid_validity = update->uid_validity; + if (hdr->uid_validity != 0) { + /* UIDVALIDITY change requires index to be reset */ + mail_index_reset(trans); + } mail_index_update_header(trans, offsetof(struct mail_index_header, uid_validity), &uid_validity, sizeof(uid_validity), TRUE);