dgaudet 97/06/30 18:37:12
Modified: src Tag: APACHE_1_2_X CHANGES http_protocol.c
http_request.c httpd.h
Log:
Added begun_read_body to request_rec so that subreqs and internal redirects
won't try to read the request body twice.
Submitted by: Roy Fielding
Reviewed by: Alexei Kosut, Dean Gaudet
Revision Changes Path
No revision
No revision
1.286.2.23 +5 -1 apache/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache/src/CHANGES,v
retrieving revision 1.286.2.22
retrieving revision 1.286.2.23
diff -C3 -r1.286.2.22 -r1.286.2.23
*** CHANGES 1997/06/30 00:02:00 1.286.2.22
--- CHANGES 1997/07/01 01:37:07 1.286.2.23
***************
*** 29,35 ****
lockfile in any location. It previously defaulted to /usr/tmp/htlock.
[Somehow it took four of us: Randy Terbush, Jim Jagielski, Dean Gaudet,
Marc Slemko]
!
*) Add a placeholder in modules/Makefile to avoid errors with certain
makes. [Marc Slemko]
--- 29,39 ----
lockfile in any location. It previously defaulted to /usr/tmp/htlock.
[Somehow it took four of us: Randy Terbush, Jim Jagielski, Dean Gaudet,
Marc Slemko]
!
! *) Request processing now retains state of whether or not the request
! body has been read, so that internal redirects and subrequests will
! not try to read it twice (and block). [Roy Fielding]
!
*) Add a placeholder in modules/Makefile to avoid errors with certain
makes. [Marc Slemko]
1.126.2.1 +4 -1 apache/src/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_protocol.c,v
retrieving revision 1.126
retrieving revision 1.126.2.1
diff -C3 -r1.126 -r1.126.2.1
*** http_protocol.c 1997/05/29 03:44:31 1.126
--- http_protocol.c 1997/07/01 01:37:08 1.126.2.1
***************
*** 868,873 ****
--- 868,874 ----
rnew->read_length = r->read_length;
rnew->read_body = REQUEST_NO_BODY;
+ rnew->begun_read_body = r->begun_read_body;
rnew->main = (request_rec *)r;
}
***************
*** 1345,1351 ****
int should_client_block (request_rec *r)
{
! if (is_HTTP_ERROR(r->status))
return 0;
if (!r->read_chunked && (r->remaining <= 0))
--- 1346,1352 ----
int should_client_block (request_rec *r)
{
! if (r->begun_read_body || is_HTTP_ERROR(r->status))
return 0;
if (!r->read_chunked && (r->remaining <= 0))
***************
*** 1396,1401 ****
--- 1397,1404 ----
int c;
long len_read, len_to_read;
long chunk_start = 0;
+
+ r->begun_read_body = 1;
if (!r->read_chunked) { /* Content-length read */
len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
1.50.2.2 +2 -0 apache/src/http_request.c
Index: http_request.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_request.c,v
retrieving revision 1.50.2.1
retrieving revision 1.50.2.2
diff -C3 -r1.50.2.1 -r1.50.2.2
*** http_request.c 1997/06/27 02:21:21 1.50.2.1
--- http_request.c 1997/07/01 01:37:09 1.50.2.2
***************
*** 1095,1100 ****
--- 1095,1102 ----
*/
new->no_local_copy = r->no_local_copy;
+ new->begun_read_body = r->begun_read_body; /* We can only read it once
*/
+
ap_snprintf (t, sizeof(t), "%d", r->status);
table_set (new->subprocess_env, "REDIRECT_STATUS", pstrdup (r->pool,
t));
1.111.2.4 +1 -0 apache/src/httpd.h
Index: httpd.h
===================================================================
RCS file: /export/home/cvs/apache/src/httpd.h,v
retrieving revision 1.111.2.3
retrieving revision 1.111.2.4
diff -C3 -r1.111.2.3 -r1.111.2.4
*** httpd.h 1997/06/29 18:51:23 1.111.2.3
--- httpd.h 1997/07/01 01:37:09 1.111.2.4
***************
*** 472,477 ****
--- 472,478 ----
long read_length; /* bytes that have been read */
int read_body; /* how the request body should be read */
int read_chunked; /* reading chunked transfer-coding */
+ int begun_read_body; /* false (0) until first get_client_block */
/* MIME header environments, in and out. Also, an array containing
* environment variables to be passed to subprocesses, so people can