> 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

Reply via email to