From 690365de611af3475b1654041e5b36e8ff1635c2 Mon Sep 17 00:00:00 2001 From: ylavic Date: Mon, 26 Jun 2023 21:55:25 +0200 Subject: [PATCH] mpm_event: Periodic linger queue shrink (500ms). --- server/mpm/event/event.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 4ffe18f4953..e2396ed687f 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -2545,7 +2545,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) proc_info *ti = dummy; int process_slot = ti->pslot; process_score *ps = ap_get_scoreboard_process(process_slot); - apr_time_t next_stats_time = 0; + apr_time_t next_stats_time = 0, next_shrink_time = 0; apr_interval_time_t min_poll_timeout = -1; free(ti); @@ -2944,6 +2944,7 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) /* The linger_q can be shrinked any time under pressure */ if (workers_were_busy || apr_atomic_read32(&dying)) { shrink_timeout_queue(linger_q, now); + next_shrink_time = now + QUEUES_SHRINK_TIMEOUT; } else { process_timeout_queue(linger_q, now); @@ -2965,11 +2966,13 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) "queues maintained: next timeout=%" APR_TIME_T_FMT, next_expiry ? next_expiry - now : -1); } - else if ((workers_were_busy || apr_atomic_read32(&dying)) - && apr_atomic_read32(keepalive_q->total)) { + else if (next_shrink_time <= now + && (workers_were_busy || apr_atomic_read32(&dying)) + && apr_atomic_read32(linger_q->total)) { apr_thread_mutex_lock(timeout_mutex); - shrink_timeout_queue(keepalive_q, now); + shrink_timeout_queue(linger_q, now); apr_thread_mutex_unlock(timeout_mutex); + next_shrink_time = now + QUEUES_SHRINK_TIMEOUT; } } /* listener main loop */