On Monday, 19 December 2005 at 01:19, Vincent Lefevre wrote: > On 2005-12-17 23:15:07 -0800, Brendan Cully wrote: > > Looking back over this, this is probably not a timeout issue, but > > simply something going wrong with the pipelining code. The message is > > that a timeout will expire in 26 minutes, which means you've probably > > been idling for about 4. A .muttdebug0 snippet starting from the IDLE > > before the * OK Timeout message would be helpful. ... > Here is it: > < + Waiting for DONE > > DONE > a0029 IDLE > < * 223 EXISTS > Handling EXISTS > cmd_handle_untagged: New mail in INBOX - 223 messages total. > < * 1 RECENT > < * OK Timeout in 30 minutes > < a0028 OK IDLE completed > imap_cmd_finish: Fetching new mail > message.c:99: mutt_mktemp returns "/var/tmp/mutt-dixsept-325-12367-27". > > a0030 FETCH 223:223 (UID FLAGS INTERNALDATE RFC822.SIZE > > BODY.PEEK[HEADER.FIELDS (DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES > > CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST > > X-LABEL)]) > < + Waiting for DONE > < a0029 BAD Bogus IDLE continuation Ah, this was helpful. I think I found a race that could lead to this. Can you try the attached patch?
diff -r e13d3daf0cb4 imap/imap.c
--- a/imap/imap.c Mon Dec 19 00:13:43 2005
+++ b/imap/imap.c Sun Dec 18 16:43:48 2005
@@ -1261,15 +1261,16 @@
|| force || time(NULL) >= idata->lastread + ImapKeepalive))
{
imap_cmd_start (idata, "IDLE");
+ idata->state = IMAP_IDLE;
do
result = imap_cmd_step (idata);
while (result == IMAP_CMD_CONTINUE);
if (result != IMAP_CMD_RESPOND)
{
dprint (1, (debugfile, "Error starting IDLE\n"));
+ idata->state = IMAP_SELECTED;
return -1;
}
- idata->state = IMAP_IDLE;
}
if (idata->state == IMAP_IDLE)
{
Attachment:
pgpabhpDzmgdT.pgp
Description: PGP signature