perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Philippe M. Chiasson" <go...@ectoplasm.org>
Subject Re: [mp2] <Perl> Directive changes the command nam
Date Mon, 12 Sep 2005 17:45:31 GMT
Philip M. Gollucci wrote:
> pradeep kumar wrote:
> 
>> Hi Philppe,
>>  
>> I did try using mod_perl 2.0.1 and got the same "-e" in the ps output
>> instead of
>> "/PATH_TO_HTTPD -d /PATH_OF_APACHE -k start".
> 
> I'll confirm this in mp2 svn.

Still unable to reproduce this on my end.

> Here's the relevenant section in modperl_cmd.c:
> 
>     {
>         SV *code = newSVpv(arg, 0);
>         GV *gv = gv_fetchpv("0", TRUE, SVt_PV);
> 
>         ENTER;SAVETMPS;

This bit creates the equivalent of a {} block for scoping issues

>         save_scalar(gv); /* local $0 */

As the comment points out, this is just like local $0

> #if PERL_REVISION == 5 && PERL_VERSION >= 9
>         TAINT_NOT; /* XXX: temp workaround, see my p5p post */
> #endif
>         sv_setpv_mg(GvSV(gv), directive->filename);

This sets $0 to directive->filename (setpv_mg so that the magic that
changes argv[0] is performed)

>         eval_sv(code, G_SCALAR|G_KEEPERR);
>         SvREFCNT_dec(code);
>         modperl_env_sync_srv_env_hash2table(aTHX_ p, scfg);
>         modperl_env_sync_dir_env_hash2table(aTHX_ p, dcfg);
>         FREETMPS;LEAVE;

This closes the pseudo-{} block we just created, restoring $0

>     }
> 
> Okay, now, how do I go about figuring out this XS.  I've read most if
> not all of the perldoc things like guts and xs etc...

This is the simplest example I can think of to localize something:

    #define PRINT$0 eval_pv("print STDERR qq(Dollar 0 = $0\n)", 0)

    GV *gv = gv_fetchpv("0", TRUE, SVt_PV);
    PRINT$0;
    ENTER;SAVETMPS;
        PRINT$0;
        save_scalar(gv);
        PRINT$0;
        sv_setpv_mg(GvSV(gv), "Hello XS");
        PRINT$0;
    FREETMPS;LEAVE;
    PRINT$0;

And you'd get:

Dollar 0 = t/Test.t
Dollar 0 = t/Test.t
Dollar 0 =
Dollar 0 = Hello XS
Dollar 0 = t/Test.t

> Perl_gv_dump and Perl_sv_dump don't tell me too much that I can use.
> 
> Any pointers to your favorite documentation?
> 
> Me thinks that this needs to change ?
>         sv_setpv_mg(GvSV(gv), directive->filename);

Why? It's doing exactly what it's supposed to be doing ...

--------------------------------------------------------------------------------
Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5
http://gozer.ectoplasm.org/     F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5

Mime
View raw message