dovecot-2.2: dsync: Avoid infinite looping.

dovecot at dovecot.org dovecot at dovecot.org
Tue Jan 8 04:33:21 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/475a494b2fab
changeset: 15588:475a494b2fab
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Jan 08 04:33:01 2013 +0200
description:
dsync: Avoid infinite looping.

diffstat:

 src/doveadm/dsync/dsync-brain-mails.c |  26 ++++++++++++++------------
 1 files changed, 14 insertions(+), 12 deletions(-)

diffs (52 lines):

diff -r cf361d83bea6 -r 475a494b2fab src/doveadm/dsync/dsync-brain-mails.c
--- a/src/doveadm/dsync/dsync-brain-mails.c	Tue Jan 08 04:00:04 2013 +0200
+++ b/src/doveadm/dsync/dsync-brain-mails.c	Tue Jan 08 04:33:01 2013 +0200
@@ -114,7 +114,7 @@
 	return TRUE;
 }
 
-static void dsync_brain_send_mail_request(struct dsync_brain *brain)
+static bool dsync_brain_send_mail_request(struct dsync_brain *brain)
 {
 	const struct dsync_mail_request *request;
 
@@ -122,17 +122,19 @@
 
 	while ((request = dsync_mailbox_import_next_request(brain->box_importer)) != NULL) {
 		if (dsync_ibc_send_mail_request(brain->ibc, request) == 0)
-			return;
+			return TRUE;
 	}
-	if (brain->box_recv_state > DSYNC_BOX_STATE_CHANGES) {
-		dsync_ibc_send_end_of_list(brain->ibc);
-		if (brain->box_exporter != NULL)
-			brain->box_send_state = DSYNC_BOX_STATE_MAILS;
-		else {
-			i_assert(brain->box_recv_state != DSYNC_BOX_STATE_DONE);
-			brain->box_send_state = DSYNC_BOX_STATE_DONE;
-		}
+	if (brain->box_recv_state <= DSYNC_BOX_STATE_CHANGES)
+		return FALSE;
+
+	dsync_ibc_send_end_of_list(brain->ibc);
+	if (brain->box_exporter != NULL)
+		brain->box_send_state = DSYNC_BOX_STATE_MAILS;
+	else {
+		i_assert(brain->box_recv_state != DSYNC_BOX_STATE_DONE);
+		brain->box_send_state = DSYNC_BOX_STATE_DONE;
 	}
+	return TRUE;
 }
 
 static void dsync_brain_sync_half_finished(struct dsync_brain *brain)
@@ -293,8 +295,8 @@
 		changed = TRUE;
 		break;
 	case DSYNC_BOX_STATE_MAIL_REQUESTS:
-		dsync_brain_send_mail_request(brain);
-		changed = TRUE;
+		if (dsync_brain_send_mail_request(brain))
+			changed = TRUE;
 		break;
 	case DSYNC_BOX_STATE_MAILS:
 		if (!dsync_ibc_is_send_queue_full(brain->ibc)) {


More information about the dovecot-cvs mailing list