httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stas Bekman <s...@stason.org>
Subject Re: EOS is not being sent for HEAD requests
Date Tue, 02 Mar 2004 20:42:21 GMT
Bojan Smojver wrote:
> If you have mod_logio configured, this might be its doing. It replaces
> the EOS with FLUSH. This is in order to make sure all output is counted
> and logged properly for each request.
> 
> Here is the code from mod_logio that does that:
> 
> -------------------------------------------------------
> static apr_status_t logio_out_filter(ap_filter_t *f,
>                                      apr_bucket_brigade *bb) {
>     apr_bucket *b = APR_BRIGADE_LAST(bb);
> 
>     /* End of data, make sure we flush */
>     if (APR_BUCKET_IS_EOS(b)) {
>         APR_BRIGADE_INSERT_TAIL(bb,
>                                 apr_bucket_flush_create(f->c->bucket_alloc));
>         APR_BUCKET_REMOVE(b);
>         apr_bucket_destroy(b);
>     }
> 
>     return ap_pass_brigade(f->next, bb);
> }
> -------------------------------------------------------
> 
> I remember trying without APR_BUCKET_REMOVE/apr_bucket_destroy, but that
> kept giving me problems. This was long time ago and I don't remember
> exactly what the nature of those problems.
> 
> Anyway, may be the culprit...
> 

Thanks Bojan, but no I don't use it.

It just shows how fragile the reliance on buckets to deliver information is. 
Any filter may decide to do whatever it wants and if you get this kind of 
problem how do you figure out where the problem is? Plug yourself into the 
filter chain and watch which filter eats the bucket? Supposedly I can do that 
on my machine. What happens to a user who can't do that? And even after 
finding the faulty filter it'll take time to fix the problem. Meanwhile my 
module will be unusable as long as users don't update the faulty filter. If I 
didn't have to rely on other filters behaving well and my code is proper I 
won't need to worry about things and spend time creating new things rather 
than trying to find the faulty filter.

That's why I'd prefer for Apache to have an API for these events, in addition 
to the meta buckets...

p.s. I have nothing against Bojan's mod_logio, but he just gave a good example 
where a filter is not well behaved (by a non-existing well-behaved-filters 
Apache spec).

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Mime
View raw message