From: Timo Sirainen Date: Mon, 15 Feb 2010 04:07:02 +0000 (+0200) Subject: mailbox_update(): Updating uid_validity requires also reseting index. X-Git-Tag: 2.0.beta3~67 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46219292a55094fa49aae33eee681ed075d30e17;p=thirdparty%2Fdovecot%2Fcore.git mailbox_update(): Updating uid_validity requires also reseting index. --HG-- branch : HEAD --- diff --git a/src/lib-storage/index/dbox-multi/mdbox-storage.c b/src/lib-storage/index/dbox-multi/mdbox-storage.c index 34afc89bef..67d2f98eb4 100644 --- a/src/lib-storage/index/dbox-multi/mdbox-storage.c +++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c @@ -180,7 +180,6 @@ static int mdbox_write_index_header(struct mailbox *box, 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 @@ static int mdbox_write_index_header(struct mailbox *box, } 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 @@ static int mdbox_write_index_header(struct mailbox *box, 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 --git a/src/lib-storage/index/dbox-single/sdbox-storage.c b/src/lib-storage/index/dbox-single/sdbox-storage.c index 7e90d50526..42502b73cf 100644 --- a/src/lib-storage/index/dbox-single/sdbox-storage.c +++ b/src/lib-storage/index/dbox-single/sdbox-storage.c @@ -117,7 +117,6 @@ static int sdbox_write_index_header(struct mailbox *box, 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 @@ static int sdbox_write_index_header(struct mailbox *box, } 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 @@ static int sdbox_write_index_header(struct mailbox *box, 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 --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index 3245ac64f4..b5d1b6a944 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -408,6 +408,10 @@ int index_storage_mailbox_update(struct mailbox *box, 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);