From: Timo Sirainen Date: Tue, 9 Jul 2013 23:50:04 +0000 (+0300) Subject: lib-http: Fixed tracking number of pending connections to host-port. X-Git-Tag: 2.2.5~80 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e0bbc29e16360119a6193e83bf180b140acb2268;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Fixed tracking number of pending connections to host-port. --- diff --git a/src/lib-http/http-client-host.c b/src/lib-http/http-client-host.c index 36095a8fd8..520e820ed0 100644 --- a/src/lib-http/http-client-host.c +++ b/src/lib-http/http-client-host.c @@ -171,7 +171,8 @@ http_client_host_port_connection_setup(struct http_client_host_port *hport) peer = http_client_peer_get(host->client, &addr); http_client_peer_add_host(peer, host); - hport->pending_connection_count++; + if (http_client_peer_handle_requests(peer)) + hport->pending_connection_count++; /* start soft connect time-out (but only if we have another IP left) */ msecs = host->client->set.soft_connect_timeout_msecs; diff --git a/src/lib-http/http-client-peer.c b/src/lib-http/http-client-peer.c index 373c175fc7..d81e824fd7 100644 --- a/src/lib-http/http-client-peer.c +++ b/src/lib-http/http-client-peer.c @@ -93,7 +93,8 @@ http_client_peer_requests_pending(struct http_client_peer *peer, } static bool -http_client_peer_next_request(struct http_client_peer *peer) +http_client_peer_next_request(struct http_client_peer *peer, + bool *created_connections) { struct http_client_connection *const *conn_idx; struct http_client_connection *conn = NULL; @@ -161,15 +162,21 @@ http_client_peer_next_request(struct http_client_peer *peer) "(already %u usable, connecting to %u, closing %u)", new_connections, working_conn_count - connecting, connecting, closing); - http_client_peer_connect(peer, new_connections); + if (new_connections > 0) { + *created_connections = TRUE; + http_client_peer_connect(peer, new_connections); + } /* now we wait until it is connected */ return FALSE; } -void http_client_peer_handle_requests(struct http_client_peer *peer) +bool http_client_peer_handle_requests(struct http_client_peer *peer) { - while (http_client_peer_next_request(peer)) ; + bool created_connections = FALSE; + + while (http_client_peer_next_request(peer, &created_connections)) ; + return created_connections; } static struct http_client_peer * @@ -259,7 +266,6 @@ void http_client_peer_add_host(struct http_client_peer *peer, { if (!http_client_peer_have_host(peer, host)) array_append(&peer->hosts, &host, 1); - http_client_peer_handle_requests(peer); } struct http_client_request * diff --git a/src/lib-http/http-client-private.h b/src/lib-http/http-client-private.h index dbbad8ccd8..44e885f608 100644 --- a/src/lib-http/http-client-private.h +++ b/src/lib-http/http-client-private.h @@ -246,7 +246,7 @@ void http_client_peer_add_host(struct http_client_peer *peer, struct http_client_request * http_client_peer_claim_request(struct http_client_peer *peer, bool no_urgent); -void http_client_peer_handle_requests(struct http_client_peer *peer); +bool http_client_peer_handle_requests(struct http_client_peer *peer); void http_client_peer_connection_success(struct http_client_peer *peer); void http_client_peer_connection_failure(struct http_client_peer *peer, const char *reason);