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/
|