From c1a1abf895ce1d95ccbfc2cbe79a06ddbba7624d Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 6 Jun 2013 12:21:14 +0300 Subject: [PATCH] lib-imap-client: Make sure DNS lookups get aborted at disconnect. --- src/lib-imap-client/imapc-connection.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index b5e769bc0c..22722a6cea 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -352,7 +352,7 @@ void imapc_connection_disconnect(struct imapc_connection *conn) bool reconnecting = conn->selected_box != NULL && conn->selected_box->reconnecting; - if (conn->fd == -1) + if (conn->state == IMAPC_CONNECTION_STATE_DISCONNECTED) return; if (conn->client->set.debug) @@ -366,14 +366,18 @@ void imapc_connection_disconnect(struct imapc_connection *conn) timeout_remove(&conn->to); if (conn->to_output != NULL) timeout_remove(&conn->to_output); - imap_parser_unref(&conn->parser); - io_remove(&conn->io); + if (conn->parser != NULL) + imap_parser_unref(&conn->parser); + if (conn->io != NULL) + io_remove(&conn->io); if (conn->ssl_iostream != NULL) ssl_iostream_unref(&conn->ssl_iostream); - i_stream_destroy(&conn->input); - o_stream_destroy(&conn->output); - net_disconnect(conn->fd); - conn->fd = -1; + if (conn->fd != -1) { + i_stream_destroy(&conn->input); + o_stream_destroy(&conn->output); + net_disconnect(conn->fd); + conn->fd = -1; + } imapc_connection_set_state(conn, IMAPC_CONNECTION_STATE_DISCONNECTED); imapc_connection_abort_commands(conn, NULL, reconnecting); -- 2.47.3