# HG changeset patch # User Timo Sirainen # Date 1266206822 -7200 # Node ID a3ec94b254566add26a3c265ee1f6c60c91626e7 # Parent 189197f30055384c8cb2a7a1b1dd499322ba48e3 mailbox_update(): Updating uid_validity requires also reseting index. diff -r 189197f30055 -r a3ec94b25456 src/lib-storage/index/dbox-multi/mdbox-storage.c --- 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; diff -r 189197f30055 -r a3ec94b25456 src/lib-storage/index/dbox-single/sdbox-storage.c --- 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); diff -r 189197f30055 -r a3ec94b25456 src/lib-storage/index/index-storage.c --- 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);