Torsten Foertsch wrote: > Hi, > > in modperl_callback.c I have found this piece of code: > > if (r || c) { > interp = modperl_interp_select(r, c, s); > aTHX = interp->perl; > } > else { > /* Child{Init,Exit}, OpenLogs */ > aTHX = scfg->mip->parent->perl; > PERL_SET_CONTEXT(aTHX); > } > > "man perlembed" says: > > Note the calls to PERL_SET_CONTEXT(). These are necessary to initialā > ize the global state that tracks which interpreter is the "current" one > on the particular process or thread that may be running it. It should > always be used if you have more than one interpreter and are making > perl API calls on both interpreters in an interleaved fashion. > > PERL_SET_CONTEXT(interp) should also be called whenever "interp" is > used by a thread that did not create it (using either perl_alloc(), or > the more esoteric perl_clone()). > > So, is it an error not to call PERL_SET_CONTEXT in the if-branch?
I would say yes, it's a bug. > Shouldn't PERL_SET_CONTEXT be called every time an interpreter is selected? Pretty much, yes. I personally think all this SET_CONTEXT stuff belongs in modperl_interp_* and not sprinkled all over the place. ------------------------------------------------------------------------ Philippe M. Chiasson GPG: F9BFE0C2480E7680 1AE53631CB32A107 88C3A5A5 http://gozer.ectoplasm.org/ m/gozer\@(apache|cpan|ectoplasm)\.org/
signature.asc
Description: OpenPGP digital signature