changeset 12788:6c4a2ca946f3

imapc: When unselecting a mailbox, send DONE to stop IDLE.
author Timo Sirainen <tss@iki.fi>
date Thu, 10 Mar 2011 18:44:20 +0200
parents 598bc0b91855
children 3984231cd873
files src/lib-storage/index/imapc/imapc-connection.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-connection.c	Thu Mar 10 18:44:00 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-connection.c	Thu Mar 10 18:44:20 2011 +0200
@@ -1339,13 +1339,18 @@
 	imapc_connection_disconnect(conn);
 }
 
-static void imapc_command_send(struct imapc_connection *conn,
-			       struct imapc_command *cmd)
+static void imapc_connection_send_idle_done(struct imapc_connection *conn)
 {
 	if ((conn->idling || conn->idle_plus_waiting) && !conn->idle_stopping) {
 		conn->idle_stopping = TRUE;
 		o_stream_send_str(conn->output, "DONE\r\n");
 	}
+}
+
+static void imapc_command_send(struct imapc_connection *conn,
+			       struct imapc_command *cmd)
+{
+	imapc_connection_send_idle_done(conn);
 	switch (conn->state) {
 	case IMAPC_CONNECTION_STATE_AUTHENTICATING:
 		array_insert(&conn->cmd_send_queue, 0, &cmd, 1);
@@ -1547,6 +1552,8 @@
 	reply.state = IMAPC_COMMAND_STATE_DISCONNECTED;
 	reply.text_without_resp = reply.text_full = "Closing mailbox";
 
+	imapc_connection_send_idle_done(box->conn);
+
 	array_foreach(&box->conn->cmd_wait_list, cmdp) {
 		if ((*cmdp)->callback != NULL) {
 			(*cmdp)->callback(&reply, (*cmdp)->context);