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