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) {