]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fixed assert-crash in mailbox_save_cancel()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 5 Oct 2016 13:34:16 +0000 (16:34 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 13 Oct 2016 08:21:16 +0000 (10:21 +0200)
Broken by 05150df8f. Fixes:
Panic: file mail-storage.c: line 2137 (mailbox_save_context_reset): assertion failed: (ctx->saving)

src/lib-storage/mail-storage.c

index 7bbda4ddc9150a07089fb038b72684d67320c881..20925a0207447a33723b7f87279db86a7ce2da4d 100644 (file)
@@ -2128,13 +2128,16 @@ mailbox_save_add_pvt_flags(struct mailbox_transaction_context *t,
        save->flags = pvt_flags;
 }
 
-static void mailbox_save_context_reset(struct mail_save_context *ctx)
+static void
+mailbox_save_context_reset(struct mail_save_context *ctx, bool success)
 {
        i_assert(!ctx->unfinished);
        if (!ctx->copying_or_moving) {
-               /* we're finishing a save (not copy/move) */
+               /* we're finishing a save (not copy/move). Note that we could
+                  have come here also from mailbox_save_cancel(), in which
+                  case ctx->saving may be FALSE. */
                i_assert(!ctx->copying_via_save);
-               i_assert(ctx->saving);
+               i_assert(ctx->saving || !success);
                ctx->saving = FALSE;
        } else {
                i_assert(ctx->copying_via_save);
@@ -2178,7 +2181,7 @@ int mailbox_save_finish(struct mail_save_context **_ctx)
        }
        if (keywords != NULL)
                mailbox_keywords_unref(&keywords);
-       mailbox_save_context_reset(ctx);
+       mailbox_save_context_reset(ctx, TRUE);
        return ret;
 }
 
@@ -2201,7 +2204,7 @@ void mailbox_save_cancel(struct mail_save_context **_ctx)
                mail = (struct mail_private *)ctx->dest_mail;
                mail->v.close(&mail->mail);
        }
-       mailbox_save_context_reset(ctx);
+       mailbox_save_context_reset(ctx, FALSE);
 }
 
 struct mailbox_transaction_context *