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 {