perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Philippe M. Chiasson" <go...@ectoplasm.org>
Subject Re: modperl_interp_pool_select
Date Fri, 03 Aug 2007 18:54:56 GMT
Torsten Foertsch wrote:
> Hi,
> 
> is it valid to say that modperl_interp_pool_select is called only at request 
> time and hence the passed pool is allways the request pool?

In the general case, yes. There is however one instance where it is also called
to acquire an interpreter at config merging time.

> I have run the test suite and in the few occasions this function is called it 
> is the request pool. But that does not mean that it allways is.

A quick look at src/modules/perl/modperl_module.c:

    152 /*
    153  * XXX: vhosts may have different parent interpreters.
    154  */
    155 static void *modperl_module_config_merge(apr_pool_t *p,
    156                                          void *basev, void *addv,
    157                                          int type)
    [...]
    185 #ifdef USE_ITHREADS
    186     interp = modperl_interp_pool_select(p, s);
    187     MP_PERL_CONTEXT_STORE_OVERRIDE(interp->perl);
    188 #endif

And in the case of server configuration merging (happens at startup),
there would be no request, and no request pool.

It goes something like this:
    790 const char *modperl_module_add(apr_pool_t *p, server_rec *s,
    791                                const char *name, SV *mod_cmds)
    792 {
    [...]
    816     modp->create_dir_config    = modperl_module_config_dir_create;
    817     modp->merge_dir_config     = modperl_module_config_dir_merge;
    818     modp->create_server_config = modperl_module_config_srv_create;
    819     modp->merge_server_config  = modperl_module_config_srv_merge;

Which is how we get our configuration merging callbacks registered
with httpd.

Also, Perl modules can register their own configuration merging:

xs/Apache2/Module/Apache2__Module.h:
     78 static MP_INLINE void mpxs_Apache2__Module_add(pTHX_
     79                                               char *package,
     80                                               SV *cmds)
     81 {
     [...]
     89     s = modperl_global_get_server_rec();
     90     error = modperl_module_add(s->process->pconf, s, package, cmds);

In any case, I am not sure what pool that ends up being, but it's probably
pconf.

------------------------------------------------------------------------
Philippe M. Chiasson     GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5
http://gozer.ectoplasm.org/       m/gozer\@(apache|cpan|ectoplasm)\.org/


Mime
View raw message