diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c index 2cfef944..7adf57f7 100644 --- a/src/microhttpd/daemon.c +++ b/src/microhttpd/daemon.c @@ -1136,21 +1136,25 @@ internal_add_connection (struct MHD_Daemon *daemon, int res_thread_create; unsigned int i; int eno; + struct MHD_Daemon *worker; #if OSX static int on = 1; #endif + if (NULL != daemon->worker_pool) { /* have a pool, try to find a pool with capacity; we use the socket as the initial offset into the pool for load balancing */ for (i=0;iworker_pool_size;i++) - if (daemon->worker_pool[(i + client_socket) % daemon->worker_pool_size].connections < - daemon->worker_pool[(i + client_socket) % daemon->worker_pool_size].connection_limit) - return internal_add_connection (&daemon->worker_pool[(i + client_socket) % daemon->worker_pool_size], - client_socket, - addr, addrlen, - external_add); + { + worker = &daemon->worker_pool[(i + client_socket) % daemon->worker_pool_size]; + if (worker->connections < worker->connection_limit) + return internal_add_connection (worker, + client_socket, + addr, addrlen, + external_add); + } /* all pools are at their connection limit, must refuse */ if (0 != MHD_socket_close_ (client_socket)) MHD_PANIC ("close failed\n");