Mercurial > dovecot > core-2.2
changeset 14124:57c735865b19
dsync: Don't assert-crash if saving a message fails.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 12 Feb 2012 05:44:13 +0200 |
parents | 9b70d164e974 |
children | e778e2c76f6f |
files | src/doveadm/dsync/dsync-worker-local.c |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/dsync/dsync-worker-local.c Sun Feb 12 05:35:54 2012 +0200 +++ b/src/doveadm/dsync/dsync-worker-local.c Sun Feb 12 05:44:13 2012 +0200 @@ -1627,10 +1627,14 @@ struct mailbox *dest_box = worker->ext_mail->box; dsync_worker_save_callback_t *callback; ssize_t ret; + bool save_failed = FALSE; while ((ret = i_stream_read(worker->save_input)) > 0 || ret == -2) { - if (mailbox_save_continue(worker->save_ctx) < 0) + if (mailbox_save_continue(worker->save_ctx) < 0) { + save_failed = TRUE; + ret = -1; break; + } } if (ret == 0) { if (worker->save_io != NULL) @@ -1651,6 +1655,9 @@ i_error("read(msg input) failed: %m"); mailbox_save_cancel(&worker->save_ctx); dsync_worker_set_failure(&worker->worker); + } else if (save_failed) { + mailbox_save_cancel(&worker->save_ctx); + dsync_worker_set_failure(&worker->worker); } else { i_assert(worker->save_input->eof); if (mailbox_save_finish(&worker->save_ctx) < 0) {