]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-client: Remove io earlier to avoid hammering
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 31 Mar 2017 08:01:15 +0000 (11:01 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Apr 2017 19:10:29 +0000 (22:10 +0300)
If connection has failed and reconnection is not yet
possible, io has to be removed here, otherwise it will
keep hammering the callback.

src/lib-imap-client/imapc-connection.c

index 5eca7b92b2c24b47775eb8cb70580095f5676af7..43f888ca88a39bf5e88182539036361c60e48ca6 100644 (file)
@@ -1603,6 +1603,8 @@ static void imapc_connection_connected(struct imapc_connection *conn)
 {
        const struct ip_addr *ip = &conn->ips[conn->prev_connect_idx];
        int err;
+       if (conn->io != NULL)
+               io_remove(&conn->io);
 
        err = net_geterror(conn->fd);
        if (err != 0) {
@@ -1612,7 +1614,6 @@ static void imapc_connection_connected(struct imapc_connection *conn)
                        strerror(err)), IMAPC_CONNECT_RETRY_WAIT_MSECS);
                return;
        }
-       io_remove(&conn->io);
        conn->io = io_add(conn->fd, IO_READ, imapc_connection_input, conn);
 
        if (conn->client->set.ssl_mode == IMAPC_CLIENT_SSL_MODE_IMMEDIATE) {