On Mon, Feb 23, 2004, Henrik Nordstrom wrote:

> > The trouble is this: what do we do if there's still data in the
> > conn in buf?
> 
> Right... Forgot about that buffer.

Heh.

> This leaves us pretty much only with the choice of allowing repeated
> comm_read after eof, having comm_read immediately return a zero length
> read like how this was done in 2.5. If not the code path gets a little too
> messed up I am afraid.

Not necessarily. I could break out the request parsing stuff
from clientReadRequest() and be able to call it in other places,
we might be able to kick-start the second request in keepaliveNextRequest()..

Take a look at this, from clientReadRequest().

    /* XXX: if we read *exactly* two requests, and the client sends no more,
     * if pipelined requests are off, we will *never* parse and insert the
     * second.  the corner condition is due to the parsing being tied to the
     * read, not the presence of data in the buffer.
     */

I'm pretty sure there was just two requests in this buffer. :-)

> > Should we try to parse it and kick start it as another request?
> 
> Yes. If you support half-closed connections then there is no reason why 
> pipelining over the same should not be supported.

*nod*

> > Or, do we just give up at this point and throw all the subsequent
> > requests away?
> 
> If this is wanted then don't enable half-closed client support.

I agree. I'm just trying to fix a crash here and I'm trying to not
take the cheap way out and simply disable half-closed clients..




Adrian

Reply via email to