List Info

Thread: What is PERL_SET_CONTEXT for?




What is PERL_SET_CONTEXT for?
user name
2007-09-26 12:08:23
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?

SHOULDN'T PERL_SET_CONTEXT BE CALLED EVERY TIME AN
INTERPRETER IS SELECTED?

THANKS,
TORSTEN
Re: What is PERL_SET_CONTEXT for?
country flaguser name
Canada
2007-09-26 17:54:59

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/

Re: What is PERL_SET_CONTEXT for?
user name
2007-09-27 07:28:35
On Thursday 27 September 2007 00:54, Philippe M. Chiasson
wrote:
> Pretty much, yes. I personally think all this
SET_CONTEXT stuff belongs
> in modperl_interp_* and not sprinkled all over the
place.

That's what I meant to say next. So, I'll include it in the
patch.

Torsten
[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )