httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ma...@hyperreal.org
Subject cvs commit: apache-apr/pthreads/src/modules/standard mod_status.c
Date Mon, 15 Feb 1999 07:43:58 GMT
manoj       99/02/14 23:43:58

  Modified:    pthreads/src/modules/standard mod_status.c
  Log:
  Started fixing up mod_status to deal with threads. All this does is add
  an extra nested loop for the different threads in each process. There is
  probably a better way to do this, but it works, and it has helped me
  find another bug.
  
  Revision  Changes    Path
  1.4       +36 -20    apache-apr/pthreads/src/modules/standard/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/pthreads/src/modules/standard/mod_status.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -u -r1.3 -r1.4
  --- mod_status.c	1999/02/10 21:06:54	1.3
  +++ mod_status.c	1999/02/15 07:43:57	1.4
  @@ -227,11 +227,10 @@
   
   static int status_handler(request_rec *r)
   {
  -#if 0
       char *loc;
       time_t nowtime = time(NULL);
       time_t up_time;
  -    int i, res;
  +    int i, j, res;
       int ready = 0;
       int busy = 0;
       unsigned long count = 0;
  @@ -250,10 +249,11 @@
   #endif
       int short_report = 0;
       int no_table_report = 0;
  -    short_score score_record;
  +    thread_score score_record;
       parent_score ps_record;
  -    char stat_buffer[HARD_SERVER_LIMIT];
  +    char stat_buffer[HARD_SERVER_LIMIT][HARD_THREAD_LIMIT];
       int pid_buffer[HARD_SERVER_LIMIT];
  +    int tid_buffer[HARD_SERVER_LIMIT][HARD_THREAD_LIMIT];
       clock_t tu, ts, tcu, tcs;
       server_rec *vhost;
   
  @@ -306,12 +306,15 @@
       if (r->header_only)
   	return 0;
   
  +    ap_sync_scoreboard_image();
       for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
  -	score_record = ap_scoreboard_image->servers[i];
  +    for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
  +	score_record = ap_scoreboard_image->servers[i][j];
   	ps_record = ap_scoreboard_image->parent[i];
   	res = score_record.status;
  -	stat_buffer[i] = status_flags[res];
  +	stat_buffer[i][j] = status_flags[res];
   	pid_buffer[i] = (int) ps_record.pid;
  +	tid_buffer[i][j] = (int) score_record.tid;
   	if (res == SERVER_READY)
   	    ready++;
   	else if (res != SERVER_DEAD)
  @@ -335,9 +338,12 @@
   	    }
   	}
       }
  +    }
   
       up_time = nowtime - ap_restart_time;
   
  +    /* ap_hard_timeout("send status info", r); */
  +
       if (!short_report) {
   	ap_rputs("<HTML><HEAD>\n<TITLE>Apache Status</TITLE>\n</HEAD><BODY>\n",
r);
   	ap_rputs("<H1>Apache Server Status for ", r);
  @@ -431,10 +437,12 @@
   	ap_rputs("Scoreboard: ", r);
   
       for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
  -	ap_rputc(stat_buffer[i], r);
  +    for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
  +	ap_rputc(stat_buffer[i][j], r);
   	if ((i % STATUS_MAXLINE == (STATUS_MAXLINE - 1)) && !short_report)
   	    ap_rputs("\n", r);
       }
  +    }
   
       if (short_report)
   	ap_rputs("\n", r);
  @@ -452,20 +460,22 @@
   	ap_rputs("\"<B><code>.</code></B>\" Open slot with no current
process<P>\n", r);
   	ap_rputs("<P>\n", r);
   	if (!ap_extended_status) {
  -	    int j = 0;
  +	    int k = 0;
   	    ap_rputs("PID Key: <br>\n", r);
   	    ap_rputs("<PRE>\n", r);
   	    for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
  -		if (stat_buffer[i] != '.') {
  +	    for (j = 0; j < HARD_SERVER_LIMIT; ++j) {
  +		if (stat_buffer[i][j] != '.') {
   		    ap_rprintf(r, "   %d in state: %c ", pid_buffer[i],
  -		     stat_buffer[i]);
  -		    if (++j >= 3) {
  +		     stat_buffer[i][j]);
  +		    if (++k >= 3) {
   		    	ap_rputs("\n", r);
  -			j = 0;
  +			k = 0;
   		    } else
   		    	ap_rputs(",", r);
   		}
   	    }
  +	    }
   	    ap_rputs("\n", r);
   	    ap_rputs("</PRE>\n", r);
   	}
  @@ -478,14 +488,15 @@
   	    else
   #ifdef NO_TIMES
   		/* Allow for OS/2 not having CPU stats */
  -		ap_rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Client<th>VHost<th>Request</tr>\n\n",
r);
  +		ap_rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>TID<th>Acc<th>M\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Client<th>VHost<th>Request</tr>\n\n",
r);
   #else
  -		ap_rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>Acc<th>M<th>CPU\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Client<th>VHost<th>Request</tr>\n\n",
r);
  +		ap_rputs("<p>\n\n<table border=0><tr><th>Srv<th>PID<th>TID<th>Acc<th>M<th>CPU\n<th>SS<th>Req<th>Conn<th>Child<th>Slot<th>Client<th>VHost<th>Request</tr>\n\n",
r);
   #endif
   	}
   
   	for (i = 0; i < HARD_SERVER_LIMIT; ++i) {
  -	    score_record = ap_scoreboard_image->servers[i];
  +	for (j = 0; j < HARD_THREAD_LIMIT; ++j) {
  +	    score_record = ap_scoreboard_image->servers[i][j];
   	    ps_record = ap_scoreboard_image->parent[i];
   	    vhost = score_record.vhostrec;
   	    if (ps_record.generation != ap_my_generation) {
  @@ -532,9 +543,10 @@
   				my_lres, lres);
   			else
   			    ap_rprintf(r,
  -				"<b>Server %d-%d</b> (%d): %d|%lu|%lu [",
  +				"<b>Server %d-%d</b> (pid: %d, tid: %d): %d|%lu|%lu [",
   				i, (int) ps_record.generation,
   				(int) ps_record.pid,
  +				(int) score_record.tid,
   				(int) conn_lres, my_lres, lres);
   
   			switch (score_record.status) {
  @@ -600,14 +612,14 @@
   		    else {		/* !no_table_report */
   			if (score_record.status == SERVER_DEAD)
   			    ap_rprintf(r,
  -				"<tr><td><b>%d-%d</b><td>-<td>%d/%lu/%lu",
  +				"<tr><td><b>%d-%d</b><td>-<td>-<td>%d/%lu/%lu",
   				i, (int) ps_record.generation,
   				(int) conn_lres, my_lres, lres);
   			else
   			    ap_rprintf(r,
  -				"<tr><td><b>%d-%d</b><td>%d<td>%d/%lu/%lu",
  +				"<tr><td><b>%d-%d</b><td>%d<td>%d<td>%d/%lu/%lu",
   				i, (int) ps_record.generation,
  -				(int) ps_record.pid, (int) conn_lres,
  +				(int) ps_record.pid, (int) score_record.tid, (int) conn_lres,
   				my_lres, lres);
   
   			switch (score_record.status) {
  @@ -674,6 +686,7 @@
   		}			/* !short_report */
   	    }			/* if (<active child>) */
   	}				/* for () */
  +	}
   
   	if (!(short_report || no_table_report)) {
   #ifdef NO_TIMES
  @@ -682,6 +695,7 @@
   <table>\n \
   <tr><th>Srv<td>Child Server number - generation\n \
   <tr><th>PID<td>OS process ID\n \
  +<tr><th>TID<td>OS thread ID\n \
   <tr><th>Acc<td>Number of accesses this connection / this child / this
slot\n \
   <tr><th>M<td>Mode of operation\n \
   <tr><th>SS<td>Seconds since beginning of most recent request\n \
  @@ -696,6 +710,7 @@
   <table>\n \
   <tr><th>Srv<td>Child Server number - generation\n \
   <tr><th>PID<td>OS process ID\n \
  +<tr><th>TID<td>OS thread ID\n \
   <tr><th>Acc<td>Number of accesses this connection / this child / this
slot\n \
   <tr><th>M<td>Mode of operation\n \
   <tr><th>CPU<td>CPU usage, number of seconds\n \
  @@ -719,7 +734,8 @@
   	ap_rputs(ap_psignature("<HR>\n",r), r);
   	ap_rputs("</BODY></HTML>\n", r);
       }
  -#endif
  +
  +    /* ap_kill_timeout(r); */
       return 0;
   }
   
  
  
  

Mime
View raw message