From: Timo Sirainen Date: Sun, 12 Feb 2012 03:44:13 +0000 (+0200) Subject: dsync: Don't assert-crash if saving a message fails. X-Git-Tag: 2.1.rc6~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6cffceef5cba04448457efe84abfcb13f2ebf038;p=thirdparty%2Fdovecot%2Fcore.git dsync: Don't assert-crash if saving a message fails. --- diff --git a/src/doveadm/dsync/dsync-worker-local.c b/src/doveadm/dsync/dsync-worker-local.c index ee9a0e9ec7..1c1923a716 100644 --- a/src/doveadm/dsync/dsync-worker-local.c +++ b/src/doveadm/dsync/dsync-worker-local.c @@ -1627,10 +1627,14 @@ local_worker_save_msg_continue(struct local_dsync_worker *worker) 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 @@ local_worker_save_msg_continue(struct local_dsync_worker *worker) 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) {