Jeremy Nixon wrote: > Fred Moyer <[EMAIL PROTECTED]> wrote: > >> But... once I changed my return codes to allow the other handlers to >> return DECLINED instead of OK in a couple of particular situations, >> push_handlers() behaved as I would have expected it to. I'm guessing >> that your PerlFixupHandler is set to return OK instead of DECLINED >> somewhere (or maybe not, PerlFixupHandler is RUN_ALL last time I checked). > > Yes, I was returning OK, but since the phases are RUN_ALL I didn't think > that would matter. And, when I register multiple handlers all the same > way, either all in httpd.conf or all with push_handlers, they all run, > even returning OK.
So I have been playing with different combinations of push_handlers() and it looks like it's working properly for RUN_FIRST handlers (my initial success with using DECLINED instead of OK) but not RUN_ALL handlers. Here's the test case, run make test and check the log to see which handlers ran. Anyone? ------------------------ t/conf/extra/conf.in PerlPostReadRequestHandler My::TestHandler <Location /test> SetHandler modperl PerlFixupHandler My::ResponseHandler PerlResponseHandler Apache2::Const::OK </Location> ----------- t/01.t #!perl use strict; use Apache::Test; use Apache::TestRequest; plan tests => 1; my $res = GET_OK '/test'; ---------------- package My::TestHandler; use strict; use warnings; use Apache2::RequestUtil; use Apache2::Const -compile => qw(OK); use Apache2::Log; sub handler { my $r = shift; $r->log->error(__PACKAGE__ . " handling request $$"); $r->push_handlers(PerlFixupHandler=> 'My::ExtraResponse'); #$r->push_handlers(PerlResponseHandler => 'My::ExtraResponse'); return Apache2::Const::OK; } 1; ------------------ package My::ResponseHandler; use strict; use warnings; use Apache2::Const -compile => qw(OK DECLINED); use Apache2::RequestIO; use Apache2::Log; sub handler { my $r = shift; $r->log->error(__PACKAGE__ . " handling request $$"); return Apache2::Const::DECLINED; } 1; ----------------- package My::ExtraResponse; use strict; use warnings; use Apache2::Const -compile => qw(OK DECLINED); use Apache2::RequestIO; use Apache2::Log; sub handler { my $r = shift; $r->log->error(__PACKAGE__ . " handling request $$"); return Apache2::Const::OK; } 1;