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