From: "Greg Ames" <[EMAIL PROTECTED]>
Sent: Thursday, December 13, 2001 12:49 PM


> "William A. Rowe, Jr." wrote:
> 
> > . Hooks are _not_ the fastest things in the world, especially with the strcmps
> >   around ->handler going on.  
> 
> Amen!  This one has been bugging me for a long time.  It won't show up
> clearly in a profiler, because the CPU cycles are spread over all the
> handlers.  We are polluting the instruction cache by touching a lot of
> separate chunks of code that only return DECLINED.
> 
> >  If we resolve the ->handler up front, why not
> >   provide a ->handler_fn member that skips the entire handler() hook walk?
> 
> The implementation would be interesting.  Consider mod_dir and
> mod_autoindex.  Both can deal with DIR_MAGIC_TYPE, and both could be
> present or absent.  But when both are present, the handler topological
> sort rules must be respected so that handle_dir runs first.  How do you
> propose dealing with that?  And what about the few handlers that support
> fuzzy matches?

Couple of bits.  If we declare handler_fn identically to a hook_handler callback,
then we can maintain the semantics.  A handler could raise it's hand, but later
DECLINE.  If it DECLINEs, or handler_fn is NULL, then we proceed with the usual
walk.

Second, autoindex should be a generator [handler].  mod_dir should _NOT_.  I spelled
out the reasons for that on 2001.12.02.  It is part of the wide bogosity of dir
requests 'slipping through' into autoindex.  mod_dir could only be considered a
handler if it returns an external redirect, any other response it provides in an
internal fixup that should happen in fixups.  If you try my mod_dir/autoindex patches
of late 2001.12.02 [when I got around to fixing the implications of mod_dir as a fixup
in mod_autoindex] you should discover it runs fine.  Had changed mod_dir it to use our
ap_fast_internal_redirect, so it will uncover more bugs than mod_negotation does alone.

Bill


Reply via email to