You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apreq-cvs@httpd.apache.org by jo...@apache.org on 2004/03/24 22:51:12 UTC
cvs commit: httpd-apreq-2/src apreq_parsers.c
joes 2004/03/24 13:51:12
Modified: . CHANGES
env mod_apreq.c
src apreq_parsers.c
Log:
apreq_brigade_concat() wasn't supplying the final EOS bucket
to large brigades (>256K), which somtimes caused the prefetch
loop in mod_apreq.c's apreq_filter() to hang.
Revision Changes Path
1.28 +11 -2 httpd-apreq-2/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-apreq-2/CHANGES,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- CHANGES 24 Mar 2004 08:22:47 -0000 1.27
+++ CHANGES 24 Mar 2004 21:51:11 -0000 1.28
@@ -3,6 +3,11 @@
@section v2_03_dev Changes with libapreq2-2.03-dev
+- C API [joes]
+ apreq_brigade_concat() wasn't supplying the final EOS bucket
+ to large brigades (>256K), which somtimes caused the prefetch
+ loop in mod_apreq.c's apreq_filter() to hang.
+
- Documentation [joes]
CHANGES file reformatted, removing dates & other clutter
as Stas suggests.
@@ -18,8 +23,12 @@
- C API [joes]
API modifications: removed struct apreq_cfg_t, adding
new apreq_env hooks max_body, max_brigade_len, and temp_dir.
- Also folded apreq_parsers.h into apreq_params.h. These changes
- make libapreq2.so.2.0.5 incompatible with earlier versions.
+ Folded apreq_parsers.h into apreq_params.h and modified the arguments
+ to apreq_run_parser() and apreq_run_hook(). Renamed
+ apreq_parser_t's content_type as enctype and apreq_copy_brigade()
+ as apreq_brigade_copy().
+ These changes make libapreq2.so.2.0.5 incompatible with earlier
+ versions.
- Perl API [stas]
Include ppport.h from blead-perl to support older perls.
1.40 +7 -7 httpd-apreq-2/env/mod_apreq.c
Index: mod_apreq.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/env/mod_apreq.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- mod_apreq.c 24 Mar 2004 08:22:47 -0000 1.39
+++ mod_apreq.c 24 Mar 2004 21:51:12 -0000 1.40
@@ -228,7 +228,7 @@
else if (content_length > (apr_int64_t)cfg->max_body) {
apreq_log(APREQ_ERROR APR_EINIT, r,
"Content-Length header (%s) exceeds configured "
- "max_body limit (" APR_OFF_T_FMT ")",
+ "max_body limit (%" APR_OFF_T_FMT ")",
cl, cfg->max_body);
ctx->status = APR_EINIT;
}
@@ -255,7 +255,7 @@
if (ctx->status != APR_INCOMPLETE || bytes == 0)
return ctx->status;
- apreq_log(APREQ_DEBUG 0, r, "prefetching %ld bytes", bytes);
+ apreq_log(APREQ_DEBUG 0, r, "prefetching %" APR_OFF_T_FMT " bytes", bytes);
s = ap_get_brigade(f, NULL, AP_MODE_READBYTES, block, bytes);
if (s != APR_SUCCESS)
return s;
@@ -469,14 +469,14 @@
apr_bucket_brigade *tmp = apr_brigade_create(r->pool,
apr_bucket_alloc_create(r->pool));
- apr_bucket *last = APR_BRIGADE_LAST(ctx->spool);
- apr_size_t total_read = 0;
+ apr_off_t total_read = 0;
if (req == NULL)
req = apreq_request(r, NULL);
while (total_read < readbytes) {
apr_off_t len;
+ apr_bucket *last = APR_BRIGADE_LAST(ctx->spool);
if (APR_BUCKET_IS_EOS(last)) {
ctx->saw_eos = 1;
@@ -492,14 +492,14 @@
total_read += len;
apreq_brigade_concat(r, ctx->spool, tmp);
APR_BRIGADE_CONCAT(ctx->bb, bb);
- last = APR_BRIGADE_LAST(ctx->spool);
}
+
ctx->bytes_read += total_read;
if (cfg->max_body >= 0 && ctx->bytes_read > cfg->max_body) {
ctx->status = APR_ENOSPC;
- apreq_log(APREQ_ERROR ctx->status, r, "Bytes read (" APR_OFF_T_FMT
- ") exceeds configured max_body limit (" APR_OFF_T_FMT ")",
+ apreq_log(APREQ_ERROR ctx->status, r, "Bytes read (%" APR_OFF_T_FMT
+ ") exceeds configured max_body limit (%" APR_OFF_T_FMT ")",
ctx->bytes_read, cfg->max_body);
}
}
1.41 +10 -9 httpd-apreq-2/src/apreq_parsers.c
Index: apreq_parsers.c
===================================================================
RCS file: /home/cvs/httpd-apreq-2/src/apreq_parsers.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- apreq_parsers.c 24 Mar 2004 08:22:48 -0000 1.40
+++ apreq_parsers.c 24 Mar 2004 21:51:12 -0000 1.41
@@ -694,7 +694,7 @@
}
f = last->data;
-
+
if (last->length > MAX_FILE_BUCKET_LENGTH) {
apr_bucket_copy(last, &e);
APR_BRIGADE_INSERT_TAIL(out, e);
@@ -702,16 +702,17 @@
e->start = last->length + 1;
last = e;
}
- s = apreq_brigade_fwrite(f->fd, &wlen, in);
- if (s != APR_SUCCESS)
- return s;
- last->length += wlen;
- last = APR_BRIGADE_LAST(in);
- if (APR_BUCKET_IS_EOS(last)) {
- apr_bucket_copy(last, &e);
+
+ e = APR_BRIGADE_LAST(in);
+ if (APR_BUCKET_IS_EOS(e)) {
+ APR_BUCKET_REMOVE(e);
APR_BRIGADE_INSERT_TAIL(out, e);
}
- return apr_brigade_destroy(in);
+
+ s = apreq_brigade_fwrite(f->fd, &wlen, in);
+ if (s == APR_SUCCESS)
+ last->length += wlen;
+ return s;
}