Return-Path: Delivered-To: apmail-httpd-cvs-archive@www.apache.org Received: (qmail 81239 invoked from network); 9 Jan 2011 23:00:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 9 Jan 2011 23:00:54 -0000 Received: (qmail 57429 invoked by uid 500); 9 Jan 2011 23:00:54 -0000 Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 57340 invoked by uid 500); 9 Jan 2011 23:00:54 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 57296 invoked by uid 99); 9 Jan 2011 23:00:54 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 09 Jan 2011 23:00:54 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 09 Jan 2011 23:00:53 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B21382388A67; Sun, 9 Jan 2011 23:00:33 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1057048 - in /httpd/httpd/trunk: CHANGES modules/generators/mod_status.c Date: Sun, 09 Jan 2011 23:00:33 -0000 To: cvs@httpd.apache.org From: sf@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110109230033.B21382388A67@eris.apache.org> Author: sf Date: Sun Jan 9 23:00:33 2011 New Revision: 1057048 URL: http://svn.apache.org/viewvc?rev=1057048&view=rev Log: mod_status: Don't show slots which are disabled by MaxClients as open. PR: 47022 Submitted by: Jordi Prats , Stefan Fritsch Modified: httpd/httpd/trunk/CHANGES httpd/httpd/trunk/modules/generators/mod_status.c Modified: httpd/httpd/trunk/CHANGES URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1057048&r1=1057047&r2=1057048&view=diff ============================================================================== --- httpd/httpd/trunk/CHANGES [utf-8] (original) +++ httpd/httpd/trunk/CHANGES [utf-8] Sun Jan 9 23:00:33 2011 @@ -2,6 +2,9 @@ Changes with Apache 2.3.11 + *) mod_status: Don't show slots which are disabled by MaxClients as open. + PR: 47022 [Jordi Prats , Stefan Fritsch] + *) mpm_prefork: Fix ap_mpm_query results for AP_MPMQ_MAX_DAEMONS and AP_MPMQ_MAX_THREADS. Modified: httpd/httpd/trunk/modules/generators/mod_status.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/generators/mod_status.c?rev=1057048&r1=1057047&r2=1057048&view=diff ============================================================================== --- httpd/httpd/trunk/modules/generators/mod_status.c (original) +++ httpd/httpd/trunk/modules/generators/mod_status.c Sun Jan 9 23:00:33 2011 @@ -86,7 +86,7 @@ module AP_MODULE_DECLARE_DATA status_module; -static int server_limit, thread_limit; +static int server_limit, thread_limit, threads_per_child, max_servers; /* Implement 'ap_run_status_hook'. */ APR_IMPLEMENT_OPTIONAL_HOOK_RUN_ALL(ap, STATUS, int, status_hook, @@ -172,7 +172,11 @@ static const struct stat_opt status_opti {STAT_OPT_END, NULL, NULL} }; -static char status_flags[SERVER_NUM_STATUS]; +/* add another state for slots above the MaxClients setting */ +#define SERVER_DISABLED SERVER_NUM_STATUS +#define MOD_STATUS_NUM_STATUS (SERVER_NUM_STATUS+1) + +static char status_flags[MOD_STATUS_NUM_STATUS]; static int status_handler(request_rec *r) { @@ -293,7 +297,12 @@ static int status_handler(request_rec *r ws_record = ap_get_scoreboard_worker_from_indexes(i, j); res = ws_record->status; - stat_buffer[indx] = status_flags[res]; + + if ((i >= max_servers || j >= threads_per_child) + && (res == SERVER_DEAD)) + stat_buffer[indx] = status_flags[SERVER_DISABLED]; + else + stat_buffer[indx] = status_flags[res]; if (!ps_record->quiescing && ps_record->pid) { @@ -483,7 +492,8 @@ static int status_handler(request_rec *r ap_rputs("\"L\" Logging, \n", r); ap_rputs("\"G\" Gracefully finishing,
\n", r); ap_rputs("\"I\" Idle cleanup of worker, \n", r); - ap_rputs("\".\" Open slot with no current process

\n", r); + ap_rputs("\".\" Open slot with no current process,
\n", r); + ap_rputs("\" \" Slot disabled by MaxClients setting

\n", r); ap_rputs("

\n", r); if (!ap_extended_status) { int j; @@ -809,8 +819,14 @@ static int status_init(apr_pool_t *p, ap status_flags[SERVER_CLOSING] = 'C'; status_flags[SERVER_GRACEFUL] = 'G'; status_flags[SERVER_IDLE_KILL] = 'I'; + status_flags[SERVER_DISABLED] = ' '; ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit); ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit); + ap_mpm_query(AP_MPMQ_MAX_THREADS, &threads_per_child); + /* work around buggy MPMs */ + if (threads_per_child == 0) + threads_per_child = 1; + ap_mpm_query(AP_MPMQ_MAX_DAEMONS, &max_servers); return OK; }