dovecot-2.1: imapc: Fixed reopening a mailbox.

dovecot at dovecot.org dovecot at dovecot.org
Thu Oct 20 16:46:18 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/221ec0404d8e
changeset: 13639:221ec0404d8e
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Oct 20 16:54:36 2011 +0300
description:
imapc: Fixed reopening a mailbox.

diffstat:

 src/lib-imap-client/imapc-client.c     |   2 +-
 src/lib-imap-client/imapc-connection.c |  25 +++++++++++--------------
 src/lib-imap-client/imapc-connection.h |   3 ++-
 3 files changed, 14 insertions(+), 16 deletions(-)

diffs (95 lines):

diff -r 809944f5015a -r 221ec0404d8e src/lib-imap-client/imapc-client.c
--- a/src/lib-imap-client/imapc-client.c	Wed Oct 19 16:11:44 2011 +0300
+++ b/src/lib-imap-client/imapc-client.c	Thu Oct 20 16:54:36 2011 +0300
@@ -266,7 +266,7 @@
 		/* 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 -r 809944f5015a -r 221ec0404d8e src/lib-imap-client/imapc-connection.c
--- a/src/lib-imap-client/imapc-connection.c	Wed Oct 19 16:11:44 2011 +0300
+++ b/src/lib-imap-client/imapc-connection.c	Thu Oct 20 16:54:36 2011 +0300
@@ -233,21 +233,23 @@
 	}
 }
 
-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 @@
 	}
 }
 
-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 @@
 	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 @@
 	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 -r 809944f5015a -r 221ec0404d8e src/lib-imap-client/imapc-connection.h
--- a/src/lib-imap-client/imapc-connection.h	Wed Oct 19 16:11:44 2011 +0300
+++ b/src/lib-imap-client/imapc-connection.h	Thu Oct 20 16:54:36 2011 +0300
@@ -25,7 +25,8 @@
 			      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);
 


More information about the dovecot-cvs mailing list