stas 2003/03/24 23:45:23
Modified: src/modules/perl mod_perl.c Log: add macros to change the base server startup phases Revision Changes Path 1.159 +15 -6 modperl-2.0/src/modules/perl/mod_perl.c Index: mod_perl.c =================================================================== RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v retrieving revision 1.158 retrieving revision 1.159 diff -u -r1.158 -r1.159 --- mod_perl.c 25 Mar 2003 04:49:05 -0000 1.158 +++ mod_perl.c 25 Mar 2003 07:45:22 -0000 1.159 @@ -1,5 +1,14 @@ #include "mod_perl.h" +/* make sure that mod_perl won't try to start itself, while it's + * already starting. If the flag's value is 1 * it's still starting, + * when it's 2 it is running */ +static int MP_init_status = 0; + +#define MP_IS_NOT_RUNNING (MP_init_status == 0 ? 1 : 0) +#define MP_IS_STARTING (MP_init_status == 1 ? 1 : 0) +#define MP_IS_RUNNING (MP_init_status == 2 ? 1 : 0) + #ifndef USE_ITHREADS static apr_status_t modperl_shutdown(void *data) { @@ -306,8 +315,6 @@ return OK; } -static int MP_init_done = 0; - void modperl_init(server_rec *base_server, apr_pool_t *p) { server_rec *s; @@ -348,7 +355,7 @@ base_perl = modperl_startup(base_server, p); - MP_init_done++; + MP_init_status = 2; /* only now mp has really started */ #ifdef USE_ITHREADS modperl_interp_init(base_server, p, base_perl); @@ -452,7 +459,7 @@ static apr_status_t modperl_sys_term(void *data) { - MP_init_done = 0; + MP_init_status = 0; modperl_env_unload(); @@ -467,10 +474,12 @@ int modperl_hook_init(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { - if (MP_init_done > 0) { + if (MP_IS_STARTING || MP_IS_RUNNING) { return OK; } + MP_init_status = 1; /* now starting */ + apr_pool_create(&server_pool, pconf); modperl_sys_init(); @@ -498,7 +507,7 @@ int modperl_is_running(void) { - return MP_init_done; + return MP_IS_RUNNING; } int modperl_hook_pre_config(apr_pool_t *p, apr_pool_t *plog,