changeset 12677:3216c3883a7b

virtual: Fixed saving multiple mails in a transaction (e.g. copy multiple messages).
author Timo Sirainen <tss@iki.fi>
date Tue, 04 Jan 2011 11:55:36 +0200
parents b8896cfa38cb
children a45ce2faf82a
files src/plugins/virtual/virtual-save.c
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-save.c	Tue Jan 04 11:44:07 2011 +0200
+++ b/src/plugins/virtual/virtual-save.c	Tue Jan 04 11:55:36 2011 +0200
@@ -21,18 +21,20 @@
 	struct mailbox_transaction_context *backend_trans;
 	struct virtual_save_context *ctx;
 
-	if (_t->save_ctx != NULL)
-		return _t->save_ctx;
-
-	ctx = i_new(struct virtual_save_context, 1);
-	ctx->ctx.transaction = &t->ictx.mailbox_ctx;
+	if (_t->save_ctx == NULL) {
+		ctx = i_new(struct virtual_save_context, 1);
+		ctx->ctx.transaction = &t->ictx.mailbox_ctx;
+		_t->save_ctx = &ctx->ctx;
+	} else {
+		ctx = (struct virtual_save_context *)_t->save_ctx;
+	}
 
 	if (mbox->save_bbox != NULL) {
+		i_assert(ctx->backend_save_ctx == NULL);
 		backend_trans =
 			virtual_transaction_get(_t, mbox->save_bbox->box);
 		ctx->backend_save_ctx = mailbox_save_alloc(backend_trans);
 	}
-	_t->save_ctx = &ctx->ctx;
 	return _t->save_ctx;
 }