On Thursday, August 19, 2010 18:24:15 Mark Risher wrote: > > The only thing where mod_perl may stay in the way here is if you use > > somehow a > > > > different interpreter for child_init than for handler. Do you use a > > threaded MPM, e.g. windows? Do you use the +Parent PerlOption in a > > VHost? > > [mr] I haven't changed the MPM, and I'm running on a Linux host. I do not > have the +Parent option
httpd -V ? could you post the httpd.conf? could you post the complete code (as simplified as possible)? As an example I have just added the following lines to my httpd.conf: <Perl> package My::XX; use strict; use Apache2::RequestRec (); use Apache2::RequestIO (); my $var; sub pv { my ($prefix)=...@_; warn "$prefix: var=".(defined $var ? "'$var'" : "UNDEF"); } sub Init { pv 'Init before'; $var++; pv 'Init after'; 0; } sub Response { my ($r)=...@_; $r->content_type('text/plain'); pv 'Response before'; $var++; pv 'Response after'; $r->print("$var\n"); 0; } </Perl> PerlChildInitHandler My::XX::Init <Location /My/XX> SetHandler modperl PerlResponseHandler My::XX::Response </Location> After a restart I see these lines in the error_log: Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. and each "curl http://localhost/My/XX" produces a pair of these: Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Init before: var=UNDEF at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Init after: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='3' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='1' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='3' at /etc/opt/apache-prefork/httpd.conf line 442. Response before: var='2' at /etc/opt/apache-prefork/httpd.conf line 442. Response after: var='3' at /etc/opt/apache-prefork/httpd.conf line 442. You see $var gets incremented and it preserves its state between calls. Why do I see multiple occurrences of var=2? There are multiple apache instances active. Each one has its own perl interpreter. So I have several interpreters and hence several $var instances that are incremented independently. Modify pv() to print out the process ID and you can see it: sub pv { my ($prefix)=...@_; warn "$$ $prefix: var=".(defined $var ? "'$var'" : "UNDEF"); } Torsten Förtsch -- Need professional modperl support? Hire me! (http://foertsch.name) Like fantasy? http://kabatinte.net