{
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--;
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;
{
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)
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)