httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brian J. France" <>
Subject Re: mod_deflate patch
Date Tue, 18 Apr 2006 19:11:02 GMT

On Apr 18, 2006, at 2:52 PM, William A. Rowe, Jr. wrote:
>> @@ -240,7 +240,7 @@
>>          const char *encoding;
>>          /* only work on main request/no subrequests */
>> -        if (!ap_is_initial_req(r)) {
>> +        if (r->main != NULL) {
>>              ap_remove_output_filter(f);
> Actually, explain to me how this code successfully leaves the http  
> protocol
> layer output_filter in the filter chain for subrequest components?

Using ap_is_initial_req:

AP_DECLARE(int) ap_is_initial_req(request_rec *r)
     return (r->main == NULL)       /* otherwise, this is a sub- 
request */
            && (r->prev == NULL);   /* otherwise, this is an internal  
redirect */

it will remove the filter for both sub-request and internal  
redirects.  The patch just removes the filter if it is a sub request.

>   I'd think
> this code (original, and even the patched flavor) could break the  
> filter stack
> by yanking the deflate filter out from the middle of servicing a  
> request, e.g.
> when a subrequest is included midstream.

The patched block of code is only called when f->ctx is NULL and  
hasn't been setup yet by mod_deflate.  I would assume when a sub  
request would get added the ctx for its ap_filter_t struct would be  
NULL and f->r->main would be the top request so the deflate filter  
would be removed.

> It seems this should be a conditional add-filter, never a  
> conditional remove
> filter event.  add-filter on the top level request, noop on nested  
> requests.

Not sure I have the expertise to comment on that.


View raw message