Greetings all,

So I've been trying to find an answer to this in both the archives and 
in the available mod_perl books, but I have not had any luck, so I was 
hoping someone on the list would know the answer.

Generally: how does subprocess_env in mod_perl 1.x behave with 
non-mod_perl handlers?

It seems from the details I can find that subprocess_env is tied to the 
"live" table of the apache process. However, I am seeing behavior that 
seems to indicate otherwise.

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.


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");


If I do the void subprocess_env trick:

$r->subprocess()

before retrieving $something, then it's populated along with the rest of 
the environment.

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.

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?


Thanks,

    --John




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