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);
}
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Jun 26 00:22:08 2002