changeset 1225:8c85c03e0485 HEAD

cork the output before sending the ending IDLE replies.
author Timo Sirainen <tss@iki.fi>
date Fri, 21 Feb 2003 16:28:45 +0200
parents b661eb87bd26
children c0783c50e47c
files src/imap/cmd-idle.c
diffstat 1 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/cmd-idle.c	Fri Feb 21 16:25:33 2003 +0200
+++ b/src/imap/cmd-idle.c	Fri Feb 21 16:28:45 2003 +0200
@@ -3,6 +3,7 @@
 #include "common.h"
 #include "ioloop.h"
 #include "istream.h"
+#include "ostream.h"
 #include "commands.h"
 
 #include <stdlib.h>
@@ -16,6 +17,8 @@
 		client->idle_to = NULL;
 	}
 
+	o_stream_cork(client->output);
+
 	if (client->idle_expunge) {
 		client_send_line(client,
 			t_strdup_printf("* %u EXPUNGE", client->idle_expunge));
@@ -25,10 +28,13 @@
 	client->io = io_add(i_stream_get_fd(client->input),
 			    IO_READ, _client_input, client);
 
-	client->mailbox->auto_sync(client->mailbox,
-				   mailbox_check_interval != 0 ?
-				   MAILBOX_SYNC_NO_EXPUNGES : MAILBOX_SYNC_NONE,
-				   mailbox_check_interval);
+	if (client->mailbox != NULL) {
+		client->mailbox->auto_sync(client->mailbox,
+					   mailbox_check_interval != 0 ?
+					   MAILBOX_SYNC_NO_EXPUNGES :
+					   MAILBOX_SYNC_NONE,
+					   mailbox_check_interval);
+	}
 
 	client_sync_full(client);
 	if (done_ok)
@@ -36,6 +42,8 @@
 	else
 		client_send_tagline(client, "BAD Expected DONE.");
 
+	o_stream_flush(client->output);
+
 	_client_reset_command(client);
 	client->bad_counter = 0;
 }
@@ -95,11 +103,9 @@
 	const char *str;
 	unsigned int interval;
 
-	if (!client_verify_open_mailbox(client))
-		return TRUE;
-
         client->idle_expunge = 0;
-	if ((client_workarounds & WORKAROUND_OUTLOOK_IDLE) != 0) {
+	if ((client_workarounds & WORKAROUND_OUTLOOK_IDLE) != 0 &&
+	    client->mailbox != NULL) {
 		client->idle_to = timeout_add((CLIENT_IDLE_TIMEOUT - 60) * 1000,
 					      idle_timeout, client);
 	}
@@ -109,7 +115,10 @@
 	if (interval == 0)
 		interval = DEFAULT_IDLE_CHECK_INTERVAL;
 
-	client->mailbox->auto_sync(client->mailbox, MAILBOX_SYNC_ALL, interval);
+	if (client->mailbox != NULL) {
+		client->mailbox->auto_sync(client->mailbox,
+					   MAILBOX_SYNC_ALL, interval);
+	}
 
 	client_send_line(client, "+ idling");