I'm using a TransHandler, and having a problem where it sometimes gets
called twice when I don't expect it - in most cases it's called just once as
I expect.
When I specify a file in a directory that doesn't exist (I'm going to use
path_info in a Mason dhandler, either to deliver a custom 404 with
autohandler, or for various other nefarious purposes), my TransHandler is
being called twice. The first time, it gets the correct $r->uri(), and I
determine that I don't want to translate the request - returning DECLINED.
The second time, the uri() is jimmied.
On an example request for /exists/non-existent-dir/file.html, the uri() is
screwed up as /file.html. If the request is /exists/non/foo/file.html, then
uri() is /foo/file.html on the second (unexpected) call to my TransHandler.
I've trimmed my server's vhost configuration down to this bare minimum:
<VirtualHost IP:PORT>
ServerAdmin [EMAIL PROTECTED]
ServerName randy.www.customer.com
DocumentRoot /www/home/cust/dev/randy/www.customer.com/
PerlTransHandler My::Trans
<Location />
SetHandler perl-script
PerlHandler My::MasonHandler
order allow,deny
allow from all
</Location>
</VirtualHost>
Note, if I remove the PerlHandler, the TransHandler isn't getting called at
all, even though I've specified it. The two packages are defined in a
single init script that's still doing fine for other vhosts.
I've troubleshot quite a bit, and the call-stack when I'm called twice is
exactly the same (/dev/null is the caller). The pid and perl interpreter is
the same for both, so I can work around it with a package-global variable
and $r->uri( $foo ) and a $r->register_cleanup( sub{$foo=0}). But not with
$r->pnotes() - it doesn't hold the value!
I don't see anything My::MasonHandler is doing (push_handlers, for instance)
that should cause a second transhandler to be called for - besides which,
that code isn't run until later anyway.
perl 5.005_03
Apache.pm v1.27
compiled into apache, not DSO
I know this Perl version isn't up to the moment, but I've had various
problems with the more up-to-date perls, and none with this version - unless
this turns out to be the exception :)
Has anybody experience with such a problem? Anybody using this perl and
mod_perl with a transhandler of such a nature, with success? Anyone have
suggestions I should try?
Thanks,
Randy