]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fixed saving multiple mails in a transaction (e.g. copy multiple messages).
authorTimo Sirainen <tss@iki.fi>
Tue, 4 Jan 2011 09:55:36 +0000 (11:55 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 4 Jan 2011 09:55:36 +0000 (11:55 +0200)
src/plugins/virtual/virtual-save.c

index 660787dc2108b77cf5a3daa1cc14aeb25735a6c8..49a90e2e248fc04ce9af66736cb512573331345f 100644 (file)
@@ -21,18 +21,20 @@ virtual_save_alloc(struct mailbox_transaction_context *_t)
        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;
 }