aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--imap.c8
2 files changed, 7 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 65ecf1d3..a5c07bb9 100644
--- a/NEWS
+++ b/NEWS
@@ -74,6 +74,8 @@ fetchmail 6.3.5 (not yet released):
* Provide INET6 to KAME/getnameinfo.c (only useful on IPv6-enabled systems that
lack getnameinfo, and there only visible in some Received: headers).
Found by Dan Fandrich.
+* Make IMAP4 IDLE work on servers that do not update RECENT counts.
+ Reported by Lars Tewes.
# CHANGES:
* Rename all fetchmail-internal lock_* functions to fm_lock_*. Obsoletes
diff --git a/imap.c b/imap.c
index 93b9729a..b7db68ff 100644
--- a/imap.c
+++ b/imap.c
@@ -679,7 +679,7 @@ static int imap_getrange(int sock,
int *countp, int *newp, int *bytes)
/* get range of messages to be fetched */
{
- int ok;
+ int ok, oldcount;
char buf[MSGBUFSIZE+1], *cp;
/* find out how many messages are waiting */
@@ -696,7 +696,9 @@ static int imap_getrange(int sock,
*
* this is a while loop because imap_idle() might return on other
* mailbox changes also */
- while (recentcount == 0 && do_idle) {
+ oldcount = count;
+ while (count <= oldcount && recentcount == 0 && do_idle) {
+ oldcount = count;
smtp_close(ctl, 1);
ok = imap_idle(sock);
if (ok)
@@ -706,7 +708,7 @@ static int imap_getrange(int sock,
}
}
/* if recentcount is 0, return no mail */
- if (recentcount == 0)
+ if (recentcount == 0 && count <= oldcount)
count = 0;
if (outlevel >= O_DEBUG)
report(stdout, ngettext("%d message waiting after re-poll\n",