dovecot-2.2: imapc: Avoid hanging when running into server probl...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Mar 20 15:01:05 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/af7a606dc15c
changeset: 17166:af7a606dc15c
user: Timo Sirainen <tss at iki.fi>
date: Thu Mar 20 17:00:31 2014 +0200
description:
imapc: Avoid hanging when running into server problems.
imapc_mail_fetch_flush() caused imail->fetch_count to drop to 0, but
imapc_mailbox_run() still started imapc_client_run() which was doing
nothing.
diffstat:
src/lib-storage/index/imapc/imapc-mail-fetch.c | 3 ++-
src/lib-storage/index/imapc/imapc-mail.c | 7 +++++--
src/lib-storage/index/imapc/imapc-storage.c | 5 +++++
src/lib-storage/index/imapc/imapc-storage.h | 1 +
4 files changed, 13 insertions(+), 3 deletions(-)
diffs (59 lines):
diff -r 610c79565959 -r af7a606dc15c src/lib-storage/index/imapc/imapc-mail-fetch.c
--- a/src/lib-storage/index/imapc/imapc-mail-fetch.c Thu Mar 20 16:15:24 2014 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail-fetch.c Thu Mar 20 17:00:31 2014 +0200
@@ -365,10 +365,11 @@
/* we'll continue waiting until we've got all the fields we wanted,
or until all FETCH replies have been received (i.e. some FETCHes
failed) */
+ imapc_mail_fetch_flush(mbox);
while (imail->fetch_count > 0 &&
(!imapc_mail_have_fields(imail, fields) ||
!imail->header_list_fetched))
- imapc_mailbox_run(mbox);
+ imapc_mailbox_run_nofetch(mbox);
return 0;
}
diff -r 610c79565959 -r af7a606dc15c src/lib-storage/index/imapc/imapc-mail.c
--- a/src/lib-storage/index/imapc/imapc-mail.c Thu Mar 20 16:15:24 2014 +0200
+++ b/src/lib-storage/index/imapc/imapc-mail.c Thu Mar 20 17:00:31 2014 +0200
@@ -357,8 +357,11 @@
struct imapc_mailbox *mbox = (struct imapc_mailbox *)_mail->box;
struct imapc_mail_cache *cache = &mbox->prev_mail_cache;
- while (mail->fetch_count > 0)
- imapc_mailbox_run(mbox);
+ if (mail->fetch_count > 0) {
+ imapc_mail_fetch_flush(mbox);
+ while (mail->fetch_count > 0)
+ imapc_mailbox_run_nofetch(mbox);
+ }
index_mail_close(_mail);
diff -r 610c79565959 -r af7a606dc15c src/lib-storage/index/imapc/imapc-storage.c
--- a/src/lib-storage/index/imapc/imapc-storage.c Thu Mar 20 16:15:24 2014 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c Thu Mar 20 17:00:31 2014 +0200
@@ -116,6 +116,11 @@
void imapc_mailbox_run(struct imapc_mailbox *mbox)
{
imapc_mail_fetch_flush(mbox);
+ imapc_mailbox_run_nofetch(mbox);
+}
+
+void imapc_mailbox_run_nofetch(struct imapc_mailbox *mbox)
+{
do {
imapc_client_run(mbox->storage->client->client);
} while (mbox->storage->reopen_count > 0);
diff -r 610c79565959 -r af7a606dc15c src/lib-storage/index/imapc/imapc-storage.h
--- a/src/lib-storage/index/imapc/imapc-storage.h Thu Mar 20 16:15:24 2014 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.h Thu Mar 20 17:00:31 2014 +0200
@@ -153,6 +153,7 @@
void imapc_transaction_save_rollback(struct mail_save_context *ctx);
void imapc_mailbox_run(struct imapc_mailbox *mbox);
+void imapc_mailbox_run_nofetch(struct imapc_mailbox *mbox);
void imapc_mail_cache_free(struct imapc_mail_cache *cache);
int imapc_mailbox_select(struct imapc_mailbox *mbox);
More information about the dovecot-cvs
mailing list