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