dovecot-2.0: virtual: Fixed saving multiple mails in a transacti...

dovecot at dovecot.org dovecot at dovecot.org
Tue Jan 4 11:55:38 EET 2011


details:   http://hg.dovecot.org/dovecot-2.0/rev/3216c3883a7b
changeset: 12542:3216c3883a7b
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Jan 04 11:55:36 2011 +0200
description:
virtual: Fixed saving multiple mails in a transaction (e.g. copy multiple messages).

diffstat:

 src/plugins/virtual/virtual-save.c |  14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diffs (30 lines):

diff -r b8896cfa38cb -r 3216c3883a7b src/plugins/virtual/virtual-save.c
--- 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;
 }
 


More information about the dovecot-cvs mailing list