You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@apache.org on 2001/12/18 05:59:13 UTC

cvs commit: httpd-2.0/modules/generators mod_status.c

trawick     01/12/17 20:59:13

  Modified:    modules/generators mod_status.c
  Log:
  Stop using HARD_SERVER_LIMIT/HARD_THREAD_LIMIT all over the place
  and instead use the mpm query function to retrieve those limits and
  use those dynamically-retrieved values when walking the scoreboard.
  
  Revision  Changes    Path
  1.50      +21 -13    httpd-2.0/modules/generators/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/generators/mod_status.c,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- mod_status.c	2001/11/23 16:35:21	1.49
  +++ mod_status.c	2001/12/18 04:59:13	1.50
  @@ -102,6 +102,7 @@
   #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"
  @@ -138,6 +139,8 @@
   
   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.
  @@ -251,8 +254,8 @@
       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;
   
  @@ -260,6 +263,9 @@
           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;
   
  @@ -311,9 +317,9 @@
   	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];
  @@ -450,9 +456,9 @@
       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);
  @@ -481,9 +487,9 @@
               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 
  @@ -515,8 +521,8 @@
   #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;
  @@ -780,6 +786,8 @@
       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;
   }