From: Timo Sirainen Date: Thu, 20 Oct 2011 13:54:36 +0000 (+0300) Subject: imapc: Fixed reopening a mailbox. X-Git-Tag: 2.1.beta1~40 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=05b24d0011d82687674c8545db1217b4f9f327b7;p=thirdparty%2Fdovecot%2Fcore.git imapc: Fixed reopening a mailbox. --- diff --git a/src/lib-imap-client/imapc-client.c b/src/lib-imap-client/imapc-client.c index c9585f763a..c6f3dd9342 100644 --- a/src/lib-imap-client/imapc-client.c +++ b/src/lib-imap-client/imapc-client.c @@ -266,7 +266,7 @@ imapc_client_reconnect_cb(const struct imapc_command_reply *reply, /* reopen the mailbox */ box->reopen_callback(box->reopen_context); } else { - imapc_connection_abort_commands(box->conn); + imapc_connection_abort_commands(box->conn, TRUE, FALSE); } } diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 655d5da159..8d390bef55 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -233,21 +233,23 @@ imapc_connection_abort_commands_array(ARRAY_TYPE(imapc_command) *cmd_array, } } -static void -imapc_connection_abort_commands_full(struct imapc_connection *conn, - bool keep_retriable) +void imapc_connection_abort_commands(struct imapc_connection *conn, + bool disconnected, bool keep_retriable) { struct imapc_command *const *cmdp, *cmd; ARRAY_TYPE(imapc_command) tmp_array; struct imapc_command_reply reply; t_array_init(&tmp_array, 8); - imapc_connection_abort_commands_array(&conn->cmd_wait_list, - &tmp_array, keep_retriable); + if (disconnected) { + imapc_connection_abort_commands_array(&conn->cmd_wait_list, + &tmp_array, + keep_retriable); + } imapc_connection_abort_commands_array(&conn->cmd_send_queue, &tmp_array, keep_retriable); - if (array_count(&conn->cmd_wait_list) > 0) { + if (array_count(&conn->cmd_wait_list) > 0 && disconnected) { /* need to move all the waiting commands to send queue */ array_append_array(&conn->cmd_wait_list, &conn->cmd_send_queue); @@ -271,11 +273,6 @@ imapc_connection_abort_commands_full(struct imapc_connection *conn, } } -void imapc_connection_abort_commands(struct imapc_connection *conn) -{ - imapc_connection_abort_commands_full(conn, FALSE); -} - static void imapc_login_callback(struct imapc_connection *conn, const struct imapc_command_reply *reply) @@ -368,13 +365,13 @@ void imapc_connection_disconnect(struct imapc_connection *conn) net_disconnect(conn->fd); conn->fd = -1; - imapc_connection_abort_commands_full(conn, reconnecting); + imapc_connection_abort_commands(conn, TRUE, reconnecting); imapc_connection_set_state(conn, IMAPC_CONNECTION_STATE_DISCONNECTED); } static void imapc_connection_set_disconnected(struct imapc_connection *conn) { - imapc_connection_abort_commands(conn); + imapc_connection_abort_commands(conn, TRUE, FALSE); imapc_connection_set_state(conn, IMAPC_CONNECTION_STATE_DISCONNECTED); } @@ -1808,7 +1805,7 @@ void imapc_connection_unselect(struct imapc_client_mailbox *box) struct imapc_connection *conn = box->conn; imapc_connection_send_idle_done(conn); - imapc_connection_abort_commands(conn); + imapc_connection_abort_commands(conn, FALSE, FALSE); if (conn->selected_box != NULL || conn->selecting_box != NULL) { i_assert(conn->selected_box == box || diff --git a/src/lib-imap-client/imapc-connection.h b/src/lib-imap-client/imapc-connection.h index b7cec0798e..8610c27ed8 100644 --- a/src/lib-imap-client/imapc-connection.h +++ b/src/lib-imap-client/imapc-connection.h @@ -25,7 +25,8 @@ void imapc_connection_connect(struct imapc_connection *conn, imapc_command_callback_t *login_callback, void *login_context); void imapc_connection_disconnect(struct imapc_connection *conn); -void imapc_connection_abort_commands(struct imapc_connection *conn); +void imapc_connection_abort_commands(struct imapc_connection *conn, + bool disconnected, bool keep_retriable); void imapc_connection_ioloop_changed(struct imapc_connection *conn); void imapc_connection_input_pending(struct imapc_connection *conn);