From: Timo Sirainen Date: Mon, 25 Dec 2017 16:49:15 +0000 (+0200) Subject: lib-imap-client: After reconnection send retried commands last X-Git-Tag: 2.3.1~411 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d405b021405ab4d23be187d9033f53e24e50b888;p=thirdparty%2Fdovecot%2Fcore.git lib-imap-client: After reconnection send retried commands last Previously only SELECT was sent before others. This allows sending more commands on reconnection before the retried commands. --- diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index b7f18011b0..6159aa2896 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -2230,6 +2230,8 @@ static void imapc_connection_send_idle_done(struct imapc_connection *conn) static void imapc_connection_cmd_send(struct imapc_command *cmd) { struct imapc_connection *conn = cmd->conn; + struct imapc_command *const *cmds; + unsigned int i, count; imapc_connection_send_idle_done(conn); @@ -2241,14 +2243,13 @@ static void imapc_connection_cmd_send(struct imapc_command *cmd) return; } - if ((cmd->flags & IMAPC_COMMAND_FLAG_SELECT) != 0 && - conn->selected_box == NULL) { - /* reopening the mailbox. add it before other - queued commands. */ - array_insert(&conn->cmd_send_queue, 0, &cmd, 1); - } else { - array_append(&conn->cmd_send_queue, &cmd, 1); + /* add the command just before retried commands */ + cmds = array_get(&conn->cmd_send_queue, &count); + for (i = count; i > 0; i--) { + if ((cmds[i-1]->flags & IMAPC_COMMAND_FLAG_RECONNECTED) == 0) + break; } + array_insert(&conn->cmd_send_queue, i, &cmd, 1); imapc_command_send_more(conn); }