dovecot-2.2: dsync: Earlier end-of-list change broke single-proc...

dovecot at dovecot.org dovecot at dovecot.org
Wed Aug 26 14:59:59 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/ac062c048240
changeset: 19016:ac062c048240
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Aug 26 16:59:07 2015 +0200
description:
dsync: Earlier end-of-list change broke single-process dsync.

diffstat:

 src/doveadm/dsync/dsync-brain-mails.c |  31 +++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 10 deletions(-)

diffs (63 lines):

diff -r 80efae622dc1 -r ac062c048240 src/doveadm/dsync/dsync-brain-mails.c
--- a/src/doveadm/dsync/dsync-brain-mails.c	Wed Aug 26 15:44:45 2015 +0200
+++ b/src/doveadm/dsync/dsync-brain-mails.c	Wed Aug 26 16:59:07 2015 +0200
@@ -187,6 +187,22 @@
 	return TRUE;
 }
 
+static int dsync_brain_export_deinit(struct dsync_brain *brain)
+{
+	const char *errstr;
+	enum mail_error error;
+
+	if (dsync_mailbox_export_deinit(&brain->box_exporter,
+					&errstr, &error) < 0) {
+		i_error("Exporting mailbox %s failed: %s",
+			mailbox_get_vname(brain->box), errstr);
+		brain->mail_error = error;
+		brain->failed = TRUE;
+		return -1;
+	}
+	return 0;
+}
+
 static void dsync_brain_sync_half_finished(struct dsync_brain *brain)
 {
 	struct dsync_mailbox_state state;
@@ -236,7 +252,10 @@
 		return FALSE;
 	if (ret == DSYNC_IBC_RECV_RET_FINISHED) {
 		brain->box_recv_state = DSYNC_BOX_STATE_RECV_LAST_COMMON;
-		i_assert(brain->box_exporter == NULL);
+		if (brain->box_exporter != NULL) {
+			if (dsync_brain_export_deinit(brain) < 0)
+				return TRUE;
+		}
 		dsync_brain_sync_half_finished(brain);
 		return TRUE;
 	}
@@ -253,8 +272,6 @@
 static bool dsync_brain_send_mail(struct dsync_brain *brain)
 {
 	const struct dsync_mail *mail;
-	const char *errstr;
-	enum mail_error error;
 
 	if (brain->mail_requests &&
 	    brain->box_recv_state < DSYNC_BOX_STATE_MAILS) {
@@ -270,14 +287,8 @@
 			return TRUE;
 	}
 
-	if (dsync_mailbox_export_deinit(&brain->box_exporter,
-					&errstr, &error) < 0) {
-		i_error("Exporting mailbox %s failed: %s",
-			mailbox_get_vname(brain->box), errstr);
-		brain->mail_error = error;
-		brain->failed = TRUE;
+	if (dsync_brain_export_deinit(brain) < 0)
 		return TRUE;
-	}
 
 	brain->box_send_state = DSYNC_BOX_STATE_DONE;
 	dsync_brain_send_end_of_list(brain, DSYNC_IBC_EOL_MAILS);


More information about the dovecot-cvs mailing list