From: Timo Sirainen Date: Thu, 10 Mar 2011 16:44:20 +0000 (+0200) Subject: imapc: When unselecting a mailbox, send DONE to stop IDLE. X-Git-Tag: 2.1.alpha1~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=731e1bc5d44a4cb545fc6e7ff1ea502674208ee7;p=thirdparty%2Fdovecot%2Fcore.git imapc: When unselecting a mailbox, send DONE to stop IDLE. --- diff --git a/src/lib-storage/index/imapc/imapc-connection.c b/src/lib-storage/index/imapc/imapc-connection.c index 4389063db9..0daa32edcf 100644 --- a/src/lib-storage/index/imapc/imapc-connection.c +++ b/src/lib-storage/index/imapc/imapc-connection.c @@ -1339,13 +1339,18 @@ static void imapc_command_timeout(struct imapc_connection *conn) 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 @@ void imapc_connection_unselect(struct imapc_client_mailbox *box) 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);