stas 2003/03/24 23:49:57
Modified: src/modules/perl mod_perl.c t/conf modperl_extra.pl Log: make sure to set base server's mip before any of the PerlRequire/PerlModule directives are called, since they may add add_config(), which in turn runs Perl sections or PerlLoadModule, which may need the scfg->mip to be set. Revision Changes Path 1.160 +25 -22 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.159 retrieving revision 1.160 diff -u -r1.159 -r1.160 --- mod_perl.c 25 Mar 2003 07:45:22 -0000 1.159 +++ mod_perl.c 25 Mar 2003 07:49:57 -0000 1.160 @@ -132,7 +132,6 @@ } - PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p) { AV *endav; @@ -188,6 +187,30 @@ perl_run(perl); +#ifdef USE_ITHREADS + if (s->is_virtual) { + /* if alloc flags is On or clone flag is On, + * virtual host gets its own mip + */ + if (MpSrvPARENT(scfg) || MpSrvCLONE(scfg)) { + MP_TRACE_i(MP_FUNC, "modperl_interp_init() server=%s\n", + modperl_server_desc(s, p)); + modperl_interp_init(s, p, perl); + } + + /* if we allocated a parent perl, mark it to be destroyed */ + if (MpSrvPARENT(scfg)) { + MpInterpBASE_On(scfg->mip->parent); + } + } + else { + /* base server */ + modperl_interp_init(s, p, perl); + MpInterpBASE_On(scfg->mip->parent); + } + +#endif + PL_endav = endav; MP_TRACE_i(MP_FUNC, "constructed interpreter=0x%lx\n", @@ -286,21 +309,6 @@ } #ifdef USE_ITHREADS - - /* if alloc flags is On or clone flag is On, - * virtual host gets its own mip - */ - if (MpSrvPARENT(scfg) || MpSrvCLONE(scfg)) { - MP_TRACE_i(MP_FUNC, "modperl_interp_init() server=%s\n", - modperl_server_desc(s, p)); - modperl_interp_init(s, p, perl); - } - - /* if we allocated a parent perl, mark it to be destroyed */ - if (MpSrvPARENT(scfg)) { - MpInterpBASE_On(scfg->mip->parent); - } - if (!scfg->mip) { /* since mips are created after merge_server_configs() * need to point to the base mip here if this vhost @@ -356,11 +364,6 @@ base_perl = modperl_startup(base_server, p); MP_init_status = 2; /* only now mp has really started */ - -#ifdef USE_ITHREADS - modperl_interp_init(base_server, p, base_perl); - MpInterpBASE_On(base_scfg->mip->parent); -#endif for (s=base_server->next; s; s=s->next) { if (modperl_init_vhost(s, p, base_server) != OK) { @@ -479,7 +482,7 @@ } MP_init_status = 1; /* now starting */ - + apr_pool_create(&server_pool, pconf); modperl_sys_init(); 1.25 +4 -0 modperl-2.0/t/conf/modperl_extra.pl Index: modperl_extra.pl =================================================================== RCS file: /home/cvs/modperl-2.0/t/conf/modperl_extra.pl,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- modperl_extra.pl 25 Mar 2003 04:49:06 -0000 1.24 +++ modperl_extra.pl 25 Mar 2003 07:49:57 -0000 1.25 @@ -56,6 +56,10 @@ EOC Apache->server->add_config([split /\n/, $conf]); +# test a directive that triggers an early startup, so we get an +# attempt to use perl's mip early +Apache->server->add_config(['<Perl >', '1;', '</Perl>']); + use constant IOBUFSIZE => 8192; sub ModPerl::Test::read_post {