dovecot-2.0: mailbox_update(): Updating uid_validity requires al...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Feb 15 06:07:07 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/a3ec94b25456
changeset: 10731:a3ec94b25456
user: Timo Sirainen <tss at iki.fi>
date: Mon Feb 15 06:07:02 2010 +0200
description:
mailbox_update(): Updating uid_validity requires also reseting index.
diffstat:
src/lib-storage/index/dbox-multi/mdbox-storage.c | 6 +++++-
src/lib-storage/index/dbox-single/sdbox-storage.c | 6 +++++-
src/lib-storage/index/index-storage.c | 4 ++++
3 files changed, 14 insertions(+), 2 deletions(-)
diffs (74 lines):
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);
More information about the dovecot-cvs
mailing list