httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Stoddard" <b...@wstoddard.com>
Subject Re: cvs commit: httpd-2.0 STATUS
Date Mon, 02 Jul 2001 17:38:48 GMT

>
> >   +    * cgi on all platforms is broken.  Specifically, with the addition of
> >   +      filters, we have lost the ability to flush partially written buffers
> >   +      received from CGI scripts to the network. Apache 1.3 does a
> >   +      non-blocking read on the pipe from the CGI. If bytes are present,
> >   +      Apache 1.3 keeps reading until one of three conditions are
> >   +      hit:
> >   +      1. output buffer fills up (Apache should flush to network)
> >   +      2. receives an EOF on the pipe (ditto & cleanup)
> >   +      3. receives EWOULDBLOCK on the non-blocking read
> >   +      In case 3, Apache should flush the network buffer then do a
> >   +      blocking read on the pipe. Apache 2.0 always does a blocking read
> >   +      (in the content length filter), thus never gets the chance to
> >   +      flush the network i/o buffer.
>
> We didn't lose this ability, we just end up relying on the filters to do
> it.  Whenever I write a filter, I always read from all buckets with
> non-blocking I/O.  This allows me to flush if I can't get data
> immediately.  If we have core filters that don't work properly then we
> need to fix them.  However, we can't ensure that all external filters will
> always work "correctly".
>
> Is there a specific place you are seeing this?
>

mod_cgi.c (and I suspect mod_cgid.c though I haven't looked).  I am working up a fix now.

Bill


Mime
View raw message