]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Don't assert-crash if saving a message fails.
authorTimo Sirainen <tss@iki.fi>
Sun, 12 Feb 2012 03:44:13 +0000 (05:44 +0200)
committerTimo Sirainen <tss@iki.fi>
Sun, 12 Feb 2012 03:44:13 +0000 (05:44 +0200)
src/doveadm/dsync/dsync-worker-local.c

index ee9a0e9ec7d243d852be8477b37d7ed91b977f78..1c1923a71615c155d25042f7b65ae1bb028de407 100644 (file)
@@ -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) {