> Example 1:
>
> I have mod_perl handlers defined for the TypeHandler and FixupHandler
> phases. If in the TypeHandler code I do this:
>
> $r->subprocess_env("TEST" => "value");
>
> Then in FixupHandler I can "see" TEST using:
>
> $something = $r->subprocess_env("TEST");
>
> Which is what you would expect.
indeed.
>
>
> Example 2:
>
> Basically the same except I have a C handler defined for TypeHandler and
> a mod_perl handler defined for FixupHandler. When the C code does:
>
> ap_table_set(r->subprocess_env, "TEST", "value");
>
> The mod_perl handler for FixupHandler doesn't see it using:
>
> $something = $r->subprocess_env("TEST");
that's not right. however, I can't reproduce this with the attached minimal
test case. see
http://perl.apache.org/~geoff/subprocess-env.tar.gz
>
>
> If I do the void subprocess_env trick:
>
> $r->subprocess()
>
> before retrieving $something, then it's populated along with the rest of
> the environment.
that only affects %ENV, not the ability of $r->subprocess_env to grab
something from the subprocess_env table. %ENV is not automatically
populated with the contents of subprocess_env, so if you're really talking
about %ENV then your Example 2 + subprocess_env() trick sounds right.
>
> However, as mentioned in many of the docs/books, this is expensive and I
> really only need the one variable.
>
> I've also tried walking the subprocess_env table in the perl handler,
> but the value set in the C handler is not there.
that's really strange. are you sure that you are not removing it in your
application someplace? try tweaking the test tarball I mentioned bit by bit
until it has the relevant logic from your code in it. I can't tell you the
number of bugs I've "fixed" by trying to reproduce the bug, only to find I
was the bug :)
>
> Are the C API subprocess_env table and the mod_perl API subprocess_env
> table distict until something (like the void call) merges the tables? Is
> this some sort of scoping issue between C and Perl?
it shouldn't be, so long as you're hitting the tables directly with
$r->subprocess_env. %ENV is another matter entirely.
--Geoff
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html