dovecot-2.2: lib-storage: Error handling fix for layout=index wh...

dovecot at dovecot.org dovecot at dovecot.org
Tue Nov 19 16:13:34 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/908283e74473
changeset: 16984:908283e74473
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Nov 19 16:13:12 2013 +0200
description:
lib-storage: Error handling fix for layout=index when mailbox creation fails.

diffstat:

 src/lib-storage/list/mailbox-list-index-backend.c |  11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diffs (38 lines):

diff -r d925674c4329 -r 908283e74473 src/lib-storage/list/mailbox-list-index-backend.c
--- a/src/lib-storage/list/mailbox-list-index-backend.c	Mon Nov 18 16:26:31 2013 +0200
+++ b/src/lib-storage/list/mailbox-list-index-backend.c	Tue Nov 19 16:13:12 2013 +0200
@@ -244,6 +244,7 @@
 	struct index_list_mailbox *ibox = INDEX_LIST_STORAGE_CONTEXT(box);
 	struct index_mailbox_list *list =
 		(struct index_mailbox_list *)box->list;
+	struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
 	struct mailbox_list_index_sync_context *sync_ctx;
 	struct mailbox_list_index_record rec;
 	struct mailbox_list_index_node *node;
@@ -263,7 +264,7 @@
 		return 0;
 	}
 
-	mail_index_lookup_ext(sync_ctx->view, seq, sync_ctx->ilist->ext_id,
+	mail_index_lookup_ext(sync_ctx->view, seq, ilist->ext_id,
 			      &data, &expunged);
 	i_assert(data != NULL && !expunged);
 	memcpy(&rec, data, sizeof(rec));
@@ -274,12 +275,14 @@
 	mail_index_update_flags(sync_ctx->trans, seq, MODIFY_REPLACE, 0);
 
 	memcpy(rec.guid, update->mailbox_guid, sizeof(rec.guid));
-	mail_index_update_ext(sync_ctx->trans, seq, sync_ctx->ilist->ext_id,
-			      &rec, NULL);
+	mail_index_update_ext(sync_ctx->trans, seq, ilist->ext_id, &rec, NULL);
 
 	success = ibox->module_ctx.super.create_box(box, update, FALSE) == 0;
-	if (mailbox_list_index_sync_end(&sync_ctx, success) < 0)
+	if (mailbox_list_index_sync_end(&sync_ctx, success) < 0) {
+		/* make sure we forget any changes done internally */
+		mailbox_list_index_reset(ilist);
 		return -1;
+	}
 	return 1;
 }
 


More information about the dovecot-cvs mailing list