On Mon, Mar 04, 2002 at 07:07:03AM -0800, Ryan Bloom wrote:
> > I now have two further problems.
> > 
> > 1) Since fast_redirect() is called from a hook, but all hooks are run
> > on this "new" request - it is possible that some hooks are left to
> > be run from the original request.  This causes a problem for the
> > AddOutputFilterByType hook (core_filters_type) since it is a fixup
> > as well and is run after the mod_dir/mod_negotiation hooks.
> Therefore,
> > when using this directive, it adds each filter twice causing segfaults
> > and infinite loops.  Oops.
> > 
> > We could play with hook ordering, but I'm pretty sure that's the
> > wrong thing to be doing.  Of course, I'm advocating removing
> > fast_redirect for precisely this problem.
> 
> I've got the problem that I just don't see that behavior.  I have add an
> AddOutputFilterByType directive to my htdocs directory, and I requested
> GET / HTTP/1.0, and I received my page back successfully.  I need a
> config that will reliably reproduce before I can fix this.

I think you need two levels of subreqs.  I was using the manual/
wich causes mod_dir->mod_negotiation.  In fact, I believe just
a MultiView will cause this (no need for mod_dir).  So,
/manual/index.html should trigger this.

> The filter chains must be "corrupted" as we generate subrequests.  The
> problem is that we have a single chain, but we need to hook into the
> middle of the chain as we go.  This has always been a problem with the
> filter chain, but it wasn't as obvious when we had a singly linked list.
> I have chosen to make the prev pointer always stay on the same chain, so
> that a sub-request is literally inserting itself into the filter chain.
> I haven't had time to test your config that is causing you problems, but
> I will as soon as I get to the office.

Were you able to reproduce it?  As I indicated in a private email
earlier today, the following config is broken:

Alias /manual "/pkg/apache-2.0-cvs/manual"

<Directory "/pkg/apache-2.0-cvs/manual">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
    AddOutputFilter DEFLATE .html
</Directory>

(This config showcases all of the bugs I've seen.)

If you have the right patches (hinted at by my earlier message),
AddOutputFilterByType DEFLATE text/html would work, but that's
corrupted since the hooks are run twice.

> Neither mod_headers or mod_deflate should be protocol level filters.
> They both operate specifically on individual resources, and should be
> resource level filters.  Change that and this problem will go away.

Let's say I come up with some protocol-level filter that has
a legitimate use and I can't add it via AddOutputFilter.  Bogus.
You're ignoring the problem by restricting what filters we can
have.  Bad idea, IMHO.

> The problem is that we are removing complexity, not adding it.  The
> problems that we have seen so far have all been to a number of hacks
> that we have added to get error pages and everything else correct.  In
> EVERY case so far, we have solved a seg fault or loop by not adding a
> filter in a case where it didn't make sense to add it anyway.
> 
> Also, and please be incredibly clear about this.  The bugs that you are
> seeing now, have NOTHING what so ever to do with the protocol filter
> concept.  The bugs that you are seeing now are 100% related to trying to
> fix the problem of losing filters when they are added at the wrong
> stage.  If you don't believe me, go back to Saturday night's tree before
> my last commit that night.  That had the protocol filters, and they
> worked correctly.

Nope, I believe the protocol filters are essentially a no-op.  They
aren't doing anything because things are only added to
r->proto_out_filters when we run ap_run_insert_filters which is
after subreqs.  I'm not seeing any benefit by having proto filters -
they just seem to serve to complicate things.  -- justin

Reply via email to