httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Justin Erenkrantz <jerenkra...@apache.org>
Subject [PATCH] httpd discards body too soon
Date Tue, 25 Jun 2002 22:21:29 GMT
On Tue, Jun 25, 2002 at 04:51:06PM -0500, Karl Fogel wrote:
> Justin Erenkrantz <jerenkrantz@apache.org> writes:
> > Hmph.  I'll try to reproduce here, but without the series of SVN
> > commands, this'll be hard.  Even if you can send me hard repro
> > recipies, I can probably sort it out.  
> > 
> > Looks like it's not eating the last line of the previous
> > request.  Odd.  -- justin
> 
> Well, basically I just ran an svn tests over DAV:
> 
>    $ cd subversion/tests/clients/cmdline
>    $ ./basic_tests.py 1 --url http://localhost
> 
> after having set up my Apache in the way recommended in the README in
> that directory, of course.

Okay, the problem is that ap_discard_request_body now checks the
keepalive status of the connection (correctly defaults to 0 which
means that ap_discard_request_body never discards requests).  That
causes a problem when ap_http_header_filter has not yet run to set
the connection's keepalive state.  mod_dav never sent an EOS, so
ap_http_header_filter never executed.  So, we must call
ap_discard_request_body only when we know the state of the
connection - which means that we must do so after the EOS is sent
to guarantee that the HTTP header filter ran.

This is a temporary fix, as I think we need to rethink checking the
connection status in ap_discard_request_body since the connection
status is only set once ap_http_header_filter is involved.  This
pretty much invalidates calling ap_discard_request_body() anywhere
except once we know the EOS is sent.  -- justin

Index: server/protocol.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/protocol.c,v
retrieving revision 1.106
diff -u -r1.106 protocol.c
--- server/protocol.c	10 Jun 2002 18:51:38 -0000	1.106
+++ server/protocol.c	25 Jun 2002 22:14:28 -0000
@@ -1046,8 +1046,6 @@
  */
 AP_DECLARE(void) ap_finalize_request_protocol(request_rec *r)
 {
-    (void) ap_discard_request_body(r);
-
     while (r->next) {
         r = r->next;
     }
@@ -1056,6 +1054,12 @@
     if (!r->eos_sent) {
         end_output_stream(r);
     }
+
+    /* Discard the body after we have ended our output stream.
+     * This allows the ap_http_header_filter to set the keepalive
+     * status of the request.
+     */
+    (void) ap_discard_request_body(r);
 }
 
 /*

Mime
View raw message