From 5044de00680c2aad9fdfdc13f9c324c9827a342a Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 25 Dec 2017 21:29:06 +0200 Subject: [PATCH] lib-imap-client: Delay sending more commands while SELECT is running --- src/lib-imap-client/imapc-connection.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 6159aa2896..2be6fc85c8 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -135,6 +135,7 @@ struct imapc_connection { bool idling:1; bool idle_stopping:1; bool idle_plus_waiting:1; + bool select_waiting_reply:1; }; static void imapc_connection_capability_cb(const struct imapc_command_reply *reply, @@ -383,6 +384,7 @@ static void imapc_connection_set_state(struct imapc_connection *conn, conn->idle_plus_waiting = FALSE; conn->idle_stopping = FALSE; + conn->select_waiting_reply = FALSE; conn->selecting_box = NULL; conn->selected_box = NULL; /* fall through */ @@ -1443,6 +1445,8 @@ static int imapc_connection_input_tagged(struct imapc_connection *conn) conn->cur_tag, line, reply.text_full); return -1; } + if ((cmd->flags & IMAPC_COMMAND_FLAG_SELECT) != 0) + conn->select_waiting_reply = FALSE; if (reply.state == IMAPC_COMMAND_STATE_BAD) { i_error("imapc(%s): Command '%s' failed with BAD: %u %s", @@ -2070,6 +2074,7 @@ static void imapc_connection_set_selecting(struct imapc_client_mailbox *box) are for the mailbox we're selecting */ conn->selected_box = box; } + conn->select_waiting_reply = TRUE; } static bool imapc_connection_is_throttled(struct imapc_connection *conn) @@ -2124,6 +2129,10 @@ static void imapc_command_send_more(struct imapc_connection *conn) /* wait until existing commands have finished */ return; } + if (conn->select_waiting_reply) { + /* wait for SELECT to finish */ + return; + } if (cmd->wait_for_literal) { /* wait until we received '+' */ return; -- 2.47.3