#include "http_core.h"
#include "http_protocol.h"
#include "http_main.h"
+#include "ap_mpm.h"
#include "util_script.h"
#include <time.h>
#include "scoreboard.h"
module AP_MODULE_DECLARE_DATA status_module;
+int server_limit, thread_limit;
+
/*
*command-related code. This is here to prevent use of ExtendedStatus
* without status_module included.
int no_table_report = 0;
worker_score ws_record;
process_score ps_record;
- char stat_buffer[HARD_SERVER_LIMIT * HARD_THREAD_LIMIT];
- pid_t pid_buffer[HARD_SERVER_LIMIT];
+ char *stat_buffer;
+ pid_t *pid_buffer;
clock_t tu, ts, tcu, tcs;
server_rec *vhost;
return DECLINED;
}
+ pid_buffer = apr_palloc(r->pool, server_limit * sizeof(pid_t));
+ stat_buffer = apr_palloc(r->pool, server_limit * thread_limit * sizeof(char));
+
nowtime = apr_time_now();
tu = ts = tcu = tcs = 0;
return 0;
/* ap_sync_scoreboard_image(); */
- for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
- for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
- int indx = (i * HARD_THREAD_LIMIT) + j;
+ for (i = 0; i < server_limit; ++i) {
+ for (j = 0; j < thread_limit; ++j) {
+ int indx = (i * thread_limit) + j;
ws_record = ap_scoreboard_image->servers[i][j];
ps_record = ap_scoreboard_image->parent[i];
else
ap_rputs("Scoreboard: ", r);
- for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
- for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
- int indx = (i * HARD_THREAD_LIMIT) + j;
+ for (i = 0; i < server_limit; ++i) {
+ for (j = 0; j < thread_limit; ++j) {
+ int indx = (i * thread_limit) + j;
ap_rputc(stat_buffer[indx], r);
if ((indx % STATUS_MAXLINE == (STATUS_MAXLINE - 1)) && !short_report)
ap_rputs("\n", r);
int k = 0;
ap_rputs("PID Key: <br />\n", r);
ap_rputs("<pre>\n", r);
- for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
- for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
- int indx = (i * HARD_THREAD_LIMIT) + j;
+ for (i = 0; i < server_limit; ++i) {
+ for (j = 0; j < thread_limit; ++j) {
+ int indx = (i * thread_limit) + j;
if (stat_buffer[indx] != '.') {
ap_rprintf(r, " %" APR_OS_PROC_T_FMT
#endif
}
- for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
- for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
+ for (i = 0; i < server_limit; ++i) {
+ for (j = 0; j < thread_limit; ++j) {
ws_record = ap_scoreboard_image->servers[i][j];
ps_record = ap_scoreboard_image->parent[i];
vhost = ws_record.vhostrec;
status_flags[SERVER_CLOSING] = 'C';
status_flags[SERVER_GRACEFUL] = 'G';
status_flags[SERVER_IDLE_KILL] = 'I';
+ ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
+ ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
return OK;
}