]> granicus.if.org Git - apache/commitdiff
Fix the threaded MPM perform_idle_server_maintenance. Basically, we now
authorRyan Bloom <rbb@apache.org>
Sun, 1 Jul 2001 22:49:31 +0000 (22:49 +0000)
committerRyan Bloom <rbb@apache.org>
Sun, 1 Jul 2001 22:49:31 +0000 (22:49 +0000)
count how many threads are actually idle, regardless of which process they
are in.  This patch makes us use (min_spare_threads|max_spare_threads)
* number_of_running_servers to determine if we should kill of processes or
start new ones.  This MPM no longer thrashes killing child processes as
soon as they are created, and the server continues to serve requests even
if the server is gracefully restarted and each child has one active thread.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89488 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/threaded/threaded.c

index 0bb76d6fb6b6f5a1e307cf91ab601386fdb97032..5ac35a4125bab12a22c6ed21364e88cfaf3517be 100644 (file)
@@ -1003,7 +1003,7 @@ static void perform_idle_server_maintenance(void)
     }
     ap_max_daemons_limit = last_non_dead + 1;
 
-    if (idle_thread_count > max_spare_threads) {
+    if (idle_thread_count > max_spare_threads * ap_max_daemons_limit) {
         /* Kill off one child */
         char char_of_death = '!';
         if ((rv = apr_file_write(pipe_of_death_out, &char_of_death, &one)) != APR_SUCCESS) {
@@ -1011,7 +1011,7 @@ static void perform_idle_server_maintenance(void)
         }
         idle_spawn_rate = 1;
     }
-    else if (idle_thread_count < min_spare_threads) {
+    else if (idle_thread_count < min_spare_threads * ap_max_daemons_limit) {
         /* terminate the free list */
         if (free_length == 0) {
            /* only report this condition once */