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 {
  
  
  

Reply via email to