On Tue, Nov 8, 2011 at 9:37 AM, Jim Jagielski <[email protected]> wrote:
> Here is the method for the Jenkins CLI that causes all the sadness.
> The major section is this:
Thanks for the testcase!
The EAGAIN is getting generated from here:
static apr_status_t get_remaining_chunk_line(http_ctx_t *ctx,
apr_bucket_brigade *b,
int linelimit)
{
apr_status_t rv;
apr_off_t brigade_length;
apr_bucket *e;
const char *lineend;
apr_size_t len = 0;
/*
* As the brigade b should have been requested in mode AP_MODE_GETLINE
* all buckets in this brigade are already some type of memory
* buckets (due to the needed scanning for LF in mode AP_MODE_GETLINE)
* or META buckets.
*/
rv = apr_brigade_length(b, 0, &brigade_length);
if (rv != APR_SUCCESS) {
return rv;
}
/* Sanity check. Should never happen. See above. */
if (brigade_length == -1) {
return APR_EGENERAL;
}
if (!brigade_length) {
return APR_EAGAIN; <<<<<<<<<< here
}
Breakpoint 2, get_remaining_chunk_line (ctx=0x20061b8, b=0x2006210,
linelimit=8190) at http_filters.c:132
132 return APR_EAGAIN;
(gdb) where
#0 get_remaining_chunk_line (ctx=0x20061b8, b=0x2006210,
linelimit=8190) at http_filters.c:132
#1 0x000000000046c4d6 in get_chunk_line (ctx=0x20061b8, b=0x2006210,
linelimit=8190) at http_filters.c:213
#2 0x000000000046cef6 in ap_http_filter (f=0x2003520, b=0x2006178,
mode=AP_MODE_READBYTES, block=APR_BLOCK_READ, readbytes=16384)
at http_filters.c:386
#3 0x0000000000432ccc in ap_get_brigade (next=0x2003520,
bb=0x2006178, mode=AP_MODE_READBYTES, block=APR_BLOCK_READ,
readbytes=16384)
at util_filter.c:496
#4 0x00007facf66955e2 in ap_proxy_http_request (p=0x2001cf8,
r=0x2001d70, p_conn=0x1f83880, worker=0x1e87190, conf=0x1e86b10,
uri=0x2003930, url=0x20039d8 "/cgi-bin/readbody.pl",
server_portstr=0x7faced7469c0 ":8080") at mod_proxy_http.c:1026
#5 0x00007facf6698cfc in proxy_http_handler (r=0x2001d70,
worker=0x1e87190, conf=0x1e86b10,
url=0x200386e "http://127.0.0.1:8080/cgi-bin/readbody.pl",
proxyname=0x0, proxyport=0) at mod_proxy_http.c:2153
#6 0x00007facf6cb9c59 in proxy_run_scheme_handler (r=0x2001d70,
worker=0x1e87190, conf=0x1e86b10,
url=0x200386e "http://127.0.0.1:8080/cgi-bin/readbody.pl",
proxyhost=0x0, proxyport=0) at mod_proxy.c:2520
#7 0x00007facf6cb5353 in proxy_handler (r=0x2001d70) at mod_proxy.c:1055
#8 0x000000000044efe2 in ap_run_handler (r=0x2001d70) at config.c:168
At the moment I'm guessing that the chunk-specific path may be missing
handling for unexpected EOF or some other error path.
My testcase based on the Jenkins code you pasted isn't doing anything
to provide a valid body, so there could be a difference in scenario
which just happens to result in the same error code. We'll see.