From: Yann Ylavic Date: Tue, 7 Oct 2014 21:59:02 +0000 (+0000) Subject: core: follow up to r1629909: fix min_spare_threads lower bound and check wrt num_buckets. X-Git-Tag: 2.5.0-alpha~3790 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ecfc45fdf08c50304ede91710c23b1b474f33cd;p=apache core: follow up to r1629909: fix min_spare_threads lower bound and check wrt num_buckets. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1629990 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 436eff0f12..2e9615ecc4 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -2809,7 +2809,7 @@ static void perform_idle_server_maintenance(int child_bucket) ap_mpm_podx_signal(pod[child_bucket], AP_MPM_PODX_GRACEFUL); retained->idle_spawn_rate[child_bucket] = 1; } - else if (idle_thread_count < min_spare_threads) { + else if (idle_thread_count < min_spare_threads / num_buckets) { /* terminate the free list */ if (free_length == 0) { /* scoreboard is full, can't fork */ @@ -3004,7 +3004,10 @@ static int event_run(apr_pool_t * _pconf, apr_pool_t * plog, server_rec * s) restart_pending = shutdown_pending = 0; set_signals(); + /* Don't thrash... */ + if (min_spare_threads < threads_per_child * num_buckets) + min_spare_threads = threads_per_child * num_buckets; if (max_spare_threads < min_spare_threads + threads_per_child * num_buckets) max_spare_threads = min_spare_threads + threads_per_child * num_buckets; @@ -3196,7 +3199,6 @@ static int event_open_logs(apr_pool_t * p, apr_pool_t * plog, } enable_default_listener = 1; - ap_duplicate_listeners(ap_server_conf, pconf, num_buckets); pod = apr_palloc(pconf, sizeof(ap_pod_t *) * num_buckets); diff --git a/server/mpm/eventopt/eventopt.c b/server/mpm/eventopt/eventopt.c index a19304989f..a377865f73 100644 --- a/server/mpm/eventopt/eventopt.c +++ b/server/mpm/eventopt/eventopt.c @@ -2630,7 +2630,7 @@ static void perform_idle_server_maintenance(int child_bucket) ap_mpm_podx_signal(pod[child_bucket], AP_MPM_PODX_GRACEFUL); retained->idle_spawn_rate[child_bucket] = 1; } - else if (idle_thread_count < min_spare_threads) { + else if (idle_thread_count < min_spare_threads / num_buckets) { /* terminate the free list */ if (free_length == 0) { /* scoreboard is full, can't fork */ @@ -2825,7 +2825,10 @@ static int event_run(apr_pool_t * _pconf, apr_pool_t * plog, server_rec * s) restart_pending = shutdown_pending = 0; set_signals(); + /* Don't thrash... */ + if (min_spare_threads < threads_per_child * num_buckets) + min_spare_threads = threads_per_child * num_buckets; if (max_spare_threads < min_spare_threads + threads_per_child * num_buckets) max_spare_threads = min_spare_threads + threads_per_child * num_buckets; @@ -3009,7 +3012,6 @@ static int event_open_logs(apr_pool_t * p, apr_pool_t * plog, } enable_default_listener = 0; - if ((num_listensocks = ap_setup_listeners(ap_server_conf)) < 1) { ap_log_error(APLOG_MARK, APLOG_ALERT | level_flags, 0, (startup ? NULL : s), diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index ab350f60ec..70261fc11c 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -1616,7 +1616,7 @@ static void perform_idle_server_maintenance(int child_bucket) ap_mpm_podx_signal(pod[child_bucket], AP_MPM_PODX_GRACEFUL); retained->idle_spawn_rate[child_bucket] = 1; } - else if (idle_thread_count < min_spare_threads) { + else if (idle_thread_count < min_spare_threads / num_buckets) { /* terminate the free list */ if (free_length == 0) { /* scoreboard is full, can't fork */ @@ -1834,7 +1834,10 @@ static int worker_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s) restart_pending = shutdown_pending = 0; set_signals(); + /* Don't thrash... */ + if (min_spare_threads < threads_per_child * num_buckets) + min_spare_threads = threads_per_child * num_buckets; if (max_spare_threads < min_spare_threads + threads_per_child * num_buckets) max_spare_threads = min_spare_threads + threads_per_child * num_buckets;