[dovecot-cvs] dovecot/src/imap cmd-idle.c,1.5,1.6

cras at procontrol.fi cras at procontrol.fi
Fri Feb 21 16:28:47 EET 2003


Update of /home/cvs/dovecot/src/imap
In directory danu:/tmp/cvs-serv58

Modified Files:
	cmd-idle.c 
Log Message:
cork the output before sending the ending IDLE replies.



Index: cmd-idle.c
===================================================================
RCS file: /home/cvs/dovecot/src/imap/cmd-idle.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- cmd-idle.c	20 Feb 2003 21:43:28 -0000	1.5
+++ cmd-idle.c	21 Feb 2003 14:28:45 -0000	1.6
@@ -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");
 




More information about the dovecot-cvs mailing list