rbb 99/02/11 08:33:05
Modified: pthreads/src/include http_conf_globals.h httpd.h
pthreads/src/main http_config.c http_core.c http_main.c
Log:
Basic cleanup to forking logic. Makes it more extenisble by the user.
Revision Changes Path
1.5 +2 -1 apache-apr/pthreads/src/include/http_conf_globals.h
Index: http_conf_globals.h
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/include/http_conf_globals.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- http_conf_globals.h 1999/02/10 21:06:51 1.4
+++ http_conf_globals.h 1999/02/11 16:33:00 1.5
@@ -74,7 +74,8 @@
extern gid_t group_id_list[NGROUPS_MAX];
#endif
extern int ap_threads_per_child;
-extern int ap_min_idle_threads;
+extern int ap_idle_thread_threshold;
+extern int ap_busy_thread_threshold;
extern int ap_max_requests_per_child;
extern int ap_excess_requests_per_child;
extern struct in_addr ap_bind_address;
1.6 +9 -0 apache-apr/pthreads/src/include/httpd.h
Index: httpd.h
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/include/httpd.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- httpd.h 1999/02/09 21:39:52 1.5
+++ httpd.h 1999/02/11 16:33:00 1.6
@@ -369,6 +369,15 @@
#ifndef DEFAULT_THREADS_PER_CHILD
#define DEFAULT_THREADS_PER_CHILD 50
#endif
+
+#ifndef DEFAULT_IDLE_THRESHOLD
+#define DEFAULT_IDLE_THRESHOLD (int)(DEFAULT_THREADS_PER_CHILD * 0.05)
+#endif
+
+#ifndef DEFAULT_BUSY_THRESHOLD
+#define DEFAULT_BUSY_THRESHOLD (DEFAULT_THREADS_PER_CHILD -
(int)(DEFAULT_THREADS_PER_CHILD * 0.05))
+#endif
+
#ifndef DEFAULT_EXCESS_REQUESTS_PER_CHILD
#define DEFAULT_EXCESS_REQUESTS_PER_CHILD 0
#endif
1.7 +2 -1 apache-apr/pthreads/src/main/http_config.c
Index: http_config.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/http_config.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- http_config.c 1999/02/10 21:06:52 1.6
+++ http_config.c 1999/02/11 16:33:04 1.7
@@ -1388,7 +1388,8 @@
ap_lock_fname = DEFAULT_LOCKFILE;
ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
ap_threads_per_child = DEFAULT_THREADS_PER_CHILD;
- ap_min_idle_threads = (int)(ap_threads_per_child * 0.05);
+ ap_idle_thread_threshold = DEFAULT_IDLE_THRESHOLD;
+ ap_busy_thread_threshold = DEFAULT_BUSY_THRESHOLD;
/* ZZZ Initialize the Network Address here. */
ap_bind_address.s_addr = htonl(INADDR_ANY);
ap_listeners = NULL;
1.6 +36 -1 apache-apr/pthreads/src/main/http_core.c
Index: http_core.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/http_core.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- http_core.c 1999/02/10 21:06:52 1.5
+++ http_core.c 1999/02/11 16:33:04 1.6
@@ -2149,6 +2149,27 @@
return NULL;
}
+static const char *set_idle_threshold(cmd_parms *cmd, void *dummy, char *arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ ap_idle_thread_threshold = atoi(arg);
+ return NULL;
+}
+
+static const char *set_busy_threshold(cmd_parms *cmd, void *dummy, char *arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+
+ ap_busy_thread_threshold = atoi(arg);
+ return NULL;
+}
static const char *set_max_free_servers(cmd_parms *cmd, void *dummy, char
*arg)
{
@@ -2197,13 +2218,23 @@
}
static const char *set_threads(cmd_parms *cmd, void *dummy, char *arg) {
+ int user_def_idle = ap_idle_thread_threshold;
+ int user_def_busy = ap_busy_thread_threshold;
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
if (err != NULL) {
return err;
}
ap_threads_per_child = atoi(arg);
- ap_min_idle_threads = (int)(ap_threads_per_child * 0.05);
+
+ ap_idle_thread_threshold = (int)(ap_threads_per_child * 0.05);
+ ap_busy_thread_threshold = ap_threads_per_child -
(int)(ap_threads_per_child * 0.05);
+
+ if (user_def_idle != DEFAULT_IDLE_THRESHOLD)
+ ap_idle_thread_threshold = user_def_idle;
+ if (user_def_busy != DEFAULT_BUSY_THRESHOLD)
+ ap_busy_thread_threshold = user_def_busy;
+
if (ap_threads_per_child < 1) {
fprintf(stderr, "WARNING: Require ThreadsPerChild > 0, setting to 1\n");
ap_threads_per_child = 1;
@@ -2807,6 +2838,10 @@
"Maximum number of idle children" },
{ "MaxServers", set_max_free_servers, NULL, RSRC_CONF, TAKE1,
"Deprecated equivalent to MaxSpareServers" },
+{ "IdleThreadThreshold", set_idle_threshold, NULL, RSRC_CONF, TAKE1,
+ "Minimum number of idle threads, below which process is considered ready
for reaping." },
+{ "BusyThreadThreshold", set_busy_threshold, NULL, RSRC_CONF, TAKE1,
+ "Maximum number of idle threads, above which process is considered busy."
},
{ "ServersSafetyLimit", set_server_limit, NULL, RSRC_CONF, TAKE1,
"Deprecated equivalent to MaxClients" },
{ "MaxClients", set_server_limit, NULL, RSRC_CONF, TAKE1,
1.16 +3 -2 apache-apr/pthreads/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- http_main.c 1999/02/10 21:06:53 1.15
+++ http_main.c 1999/02/11 16:33:04 1.16
@@ -158,7 +158,8 @@
#endif
int ap_threads_per_child;
int ap_max_requests_per_child;
-int ap_min_idle_threads;
+int ap_idle_thread_threshold;
+int ap_busy_thread_threshold;
int ap_excess_requests_per_child;
char *ap_pid_fname;
char *ap_scoreboard_fname;
@@ -2474,7 +2475,7 @@
}
}
}
- if (idle_thread_count <= ap_min_idle_threads) {
+ if (idle_thread_count <= ap_idle_thread_threshold) {
idle_count++;
to_kill = i;
}