From: Yann Ylavic Date: Tue, 7 Sep 2021 09:34:09 +0000 (+0000) Subject: mpm_event: Fix children processes possibly not stopped on graceful restart. X-Git-Tag: 2.5.0-alpha2-ci-test-only~828 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03442ed4665cbe261fd327fa2b2cdb1410106736;p=thirdparty%2Fapache%2Fhttpd.git mpm_event: Fix children processes possibly not stopped on graceful restart. The number of children spawned can go above active_daemons_limit due to exponential idle_spawn_rate growth (x 2), enforce the upper limit in perform_idle_server_maintenance(). PR 63169. Proposed by: Joel Self git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1893014 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/changes-entries/event_maintenance_spawn_limit.txt b/changes-entries/event_maintenance_spawn_limit.txt new file mode 100644 index 00000000000..7179c3b3158 --- /dev/null +++ b/changes-entries/event_maintenance_spawn_limit.txt @@ -0,0 +1,2 @@ + *) mpm_event: Fix children processes possibly not stopped on graceful + restart. PR 63169. [Joel Self ] \ No newline at end of file diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 7bfd6750c89..bffa235a6f9 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -3237,6 +3237,9 @@ static void perform_idle_server_maintenance(int child_bucket, int num_buckets) if (free_length > retained->idle_spawn_rate[child_bucket]) { free_length = retained->idle_spawn_rate[child_bucket]; } + if (free_length + active_daemons > active_daemons_limit) { + free_length = active_daemons_limit - active_daemons; + } if (retained->idle_spawn_rate[child_bucket] >= 8) { ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf, APLOGNO(00486) "server seems busy, (you may need "