From: Timo Sirainen Date: Sun, 31 Mar 2013 14:25:10 +0000 (+0300) Subject: virtual plugin: Fixed saving/copying messages to virtual mailbox. X-Git-Tag: 2.2.rc4~51 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=44320b37d20bb75e0d433423318db2f4e29d5b91;p=thirdparty%2Fdovecot%2Fcore.git virtual plugin: Fixed saving/copying messages to virtual mailbox. --- diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 5607206481..ebae25cf25 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -1813,7 +1813,6 @@ int mailbox_transaction_commit_get_changes( { struct mailbox_transaction_context *t = *_t; unsigned int save_count = t->save_count; - bool assign_uids = (t->flags & MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS) != 0; int ret; t->box->transaction_count--; @@ -1823,9 +1822,11 @@ int mailbox_transaction_commit_get_changes( T_BEGIN { ret = t->box->v.transaction_commit(t, changes_r); } T_END; - i_assert(ret < 0 || - seq_range_count(&changes_r->saved_uids) == save_count || - (array_count(&changes_r->saved_uids) == 0 && !assign_uids)); + /* either all the saved messages get UIDs or none, because a) we + failed, b) MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS not set, + c) backend doesn't support it (e.g. virtual plugin) */ + i_assert(seq_range_count(&changes_r->saved_uids) == save_count || + array_count(&changes_r->saved_uids) == 0); if (ret < 0 && changes_r->pool != NULL) pool_unref(&changes_r->pool); return ret; diff --git a/src/plugins/virtual/virtual-save.c b/src/plugins/virtual/virtual-save.c index 764e647b19..b2d2d408c6 100644 --- a/src/plugins/virtual/virtual-save.c +++ b/src/plugins/virtual/virtual-save.c @@ -113,7 +113,10 @@ int virtual_save_finish(struct mail_save_context *_ctx) { struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx; - return mailbox_save_finish(&ctx->backend_save_ctx); + if (mailbox_save_finish(&ctx->backend_save_ctx) < 0) + return -1; + _ctx->unfinished = FALSE; + return 0; } void virtual_save_cancel(struct mail_save_context *_ctx) @@ -122,6 +125,7 @@ void virtual_save_cancel(struct mail_save_context *_ctx) if (ctx->backend_save_ctx != NULL) mailbox_save_cancel(&ctx->backend_save_ctx); + _ctx->unfinished = FALSE; } void virtual_save_free(struct mail_save_context *_ctx)