Skip to content

Commit

Permalink
lib-storage: When save is aborted, close dest_mail without crashing
Browse files Browse the repository at this point in the history
Fixes:
Panic: file mail-index-transaction-update.c: line 1023 (mail_index_update_ext): assertion failed: (seq > 0 && (seq <= mail_index_view_get_messages_count(t->view) || seq <= t->last_new_seq))

Because cache was still attempted to be updated, but the mail was already
expunged from index.
  • Loading branch information
sirainen authored and villesavolainen committed May 11, 2017
1 parent d670c0c commit f1d136a
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/lib-storage/index/index-storage.c
Expand Up @@ -1117,6 +1117,13 @@ int index_storage_save_continue(struct mail_save_context *ctx,

void index_storage_save_abort_last(struct mail_save_context *ctx, uint32_t seq)
{
struct index_mail *imail = (struct index_mail *)ctx->dest_mail;

/* Close the mail before it's expunged. This allows it to be
reset cleanly. */
imail->data.no_caching = TRUE;
imail->mail.v.close(&imail->mail.mail);

mail_index_expunge(ctx->transaction->itrans, seq);
/* currently we can't just drop pending cache updates for this one
specific record, so we'll reset the whole cache transaction. */
Expand Down

0 comments on commit f1d136a

Please sign in to comment.