Return-Path: Delivered-To: apmail-httpd-cvs-archive@www.apache.org Received: (qmail 11340 invoked from network); 10 Dec 2003 20:45:11 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 10 Dec 2003 20:45:11 -0000 Received: (qmail 12817 invoked by uid 500); 10 Dec 2003 20:45:00 -0000 Delivered-To: apmail-httpd-cvs-archive@httpd.apache.org Received: (qmail 12625 invoked by uid 500); 10 Dec 2003 20:44:59 -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: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 12612 invoked by uid 500); 10 Dec 2003 20:44:59 -0000 Delivered-To: apmail-httpd-2.0-cvs@apache.org Received: (qmail 12609 invoked from network); 10 Dec 2003 20:44:59 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 10 Dec 2003 20:44:59 -0000 Received: (qmail 11287 invoked by uid 1121); 10 Dec 2003 20:45:09 -0000 Date: 10 Dec 2003 20:45:09 -0000 Message-ID: <20031210204509.11286.qmail@minotaur.apache.org> From: trawick@apache.org To: httpd-2.0-cvs@apache.org Subject: cvs commit: httpd-2.0/server/mpm/prefork prefork.c X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N trawick 2003/12/10 12:45:09 Modified: include ap_mpm.h server/mpm/prefork prefork.c Log: add new MPM query -- AP_MPMQ_MPM_STATE -- to find out what the MPM is doing work-in-progress; not so useful until other MPMs support it Revision Changes Path 1.36 +6 -1 httpd-2.0/include/ap_mpm.h Index: ap_mpm.h =================================================================== RCS file: /home/cvs/httpd-2.0/include/ap_mpm.h,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- ap_mpm.h 26 Nov 2003 03:45:34 -0000 1.35 +++ ap_mpm.h 10 Dec 2003 20:45:09 -0000 1.36 @@ -160,6 +160,11 @@ /* an MPM is using a dynamic # */ /* threads or daemons. */ +/* Values returned for AP_MPMQ_MPM_STATE */ +#define AP_MPMQ_STARTING 0 +#define AP_MPMQ_RUNNING 1 +#define AP_MPMQ_STOPPING 2 + #define AP_MPMQ_MAX_DAEMON_USED 1 /* Max # of daemons used so far */ #define AP_MPMQ_IS_THREADED 2 /* MPM can do threading */ #define AP_MPMQ_IS_FORKED 3 /* MPM can do forking */ @@ -172,7 +177,7 @@ #define AP_MPMQ_MAX_SPARE_THREADS 10 /* Max # of spare threads */ #define AP_MPMQ_MAX_REQUESTS_DAEMON 11 /* Max # of requests per daemon */ #define AP_MPMQ_MAX_DAEMONS 12 /* Max # of daemons by config */ - +#define AP_MPMQ_MPM_STATE 13 /* starting, running, stopping */ /** * Query a property of the current MPM. 1.284 +26 -2 httpd-2.0/server/mpm/prefork/prefork.c Index: prefork.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/prefork/prefork.c,v retrieving revision 1.283 retrieving revision 1.284 diff -u -r1.283 -r1.284 --- prefork.c 22 Nov 2003 20:43:25 -0000 1.283 +++ prefork.c 10 Dec 2003 20:45:09 -0000 1.284 @@ -141,7 +141,7 @@ static int server_limit = DEFAULT_SERVER_LIMIT; static int first_server_limit; static int changed_limit_at_restart; - +static int mpm_state = AP_MPMQ_STARTING; static ap_pod_t *pod; /* @@ -235,6 +235,8 @@ static void clean_child_exit(int code) __attribute__ ((noreturn)); static void clean_child_exit(int code) { + mpm_state = AP_MPMQ_STOPPING; + if (pchild) { apr_pool_destroy(pchild); } @@ -332,6 +334,9 @@ case AP_MPMQ_MAX_DAEMONS: *result = server_limit; return APR_SUCCESS; + case AP_MPMQ_MPM_STATE: + *result = mpm_state; + return APR_SUCCESS; } return APR_ENOTIMPL; } @@ -497,6 +502,10 @@ apr_bucket_alloc_t *bucket_alloc; int last_poll_idx = 0; + mpm_state = AP_MPMQ_STARTING; /* for benefit of any hooks that run as this + * child initializes + */ + my_child_num = child_num_arg; ap_my_pid = getpid(); requests_this_child = 0; @@ -549,6 +558,8 @@ (void) apr_pollset_add(pollset, &pfd); } + mpm_state = AP_MPMQ_RUNNING; + bucket_alloc = apr_bucket_alloc_create(pchild); while (!die_now) { @@ -931,6 +942,7 @@ if (rv != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "Couldn't create accept lock"); + mpm_state = AP_MPMQ_STOPPING; return 1; } @@ -945,12 +957,14 @@ ap_log_error(APLOG_MARK, APLOG_EMERG, rv, s, "Couldn't set permissions on cross-process lock; " "check User and Group directives"); + mpm_state = AP_MPMQ_STOPPING; return 1; } } if (!is_graceful) { if (ap_run_pre_mpm(s->process->pool, SB_SHARED) != OK) { + mpm_state = AP_MPMQ_STOPPING; return 1; } /* fix the generation number in the global score; we just got a new, @@ -1004,6 +1018,8 @@ #endif restart_pending = shutdown_pending = 0; + mpm_state = AP_MPMQ_RUNNING; + while (!restart_pending && !shutdown_pending) { int child_slot; apr_exit_why_e exitwhy; @@ -1020,6 +1036,7 @@ if (pid.pid != -1) { processed_status = ap_process_child_status(&pid, exitwhy, status); if (processed_status == APEXIT_CHILDFATAL) { + mpm_state = AP_MPMQ_STOPPING; return 1; } @@ -1087,6 +1104,8 @@ } } /* one_process */ + mpm_state = AP_MPMQ_STOPPING; + if (shutdown_pending) { /* Time to gracefully shut down: * Kill child processes, tell them to call child_exit, etc... @@ -1187,6 +1206,8 @@ int no_detach, debug, foreground; apr_status_t rv; + mpm_state = AP_MPMQ_STARTING; + debug = ap_exists_config_define("DEBUG"); if (debug) { @@ -1249,7 +1270,10 @@ #endif ap_hook_open_logs(prefork_open_logs, NULL, aszSucc, APR_HOOK_MIDDLE); - ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_MIDDLE); + /* we need to set the MPM state before other pre-config hooks use MPM query + * to retrieve it, so register as REALLY_FIRST + */ + ap_hook_pre_config(prefork_pre_config, NULL, NULL, APR_HOOK_REALLY_FIRST); } static const char *set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg)