diff --git a/native/mod_proxy_cluster/mod_proxy_cluster.c b/native/mod_proxy_cluster/mod_proxy_cluster.c index 6387b4505..98b1db16f 100644 --- a/native/mod_proxy_cluster/mod_proxy_cluster.c +++ b/native/mod_proxy_cluster/mod_proxy_cluster.c @@ -2200,7 +2200,7 @@ static proxy_worker *internal_find_best_byrequests(proxy_balancer *balancer, pro int checked_standby = 0; int checked_domain = 1; // Create a separate array of available workers, to be sorted later - proxy_worker *workers[balancer->workers->nelts]; + proxy_worker *workers = apr_pcalloc(balancer->workers->pool, sizeof(proxy_worker) * balancer->workers->nelts); int workers_length = 0; const char *session_id_with_route; char *tokenizer; @@ -2289,7 +2289,7 @@ static proxy_worker *internal_find_best_byrequests(proxy_balancer *balancer, pro continue; } } - workers[workers_length++] = worker; + workers[workers_length++] = *worker; if (worker->s->lbfactor == 0 && checking_standby) { mycandidate = worker; mynodecontext = nodecontext; @@ -2332,7 +2332,7 @@ static proxy_worker *internal_find_best_byrequests(proxy_balancer *balancer, pro for (i = 0; session_id[i] != 0; ++i) { hash += session_id[i]; } - mycandidate = workers[hash % workers_length]; + mycandidate = &workers[hash % workers_length]; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "Using deterministic failover target: %s", mycandidate->s->route); } if (mycandidate)