mirror of
https://github.com/curl/curl.git
synced 2026-07-24 18:37:19 +03:00
mime: fix unpausing of readers
When unpausing a transfer, check if the reader pause state differs in addition to the "keepon" flags. Reported-by: 包布丁 Fixes #18848 Closes #19178
This commit is contained in:
parent
76d2852550
commit
40f7cd2bdd
6 changed files with 68 additions and 14 deletions
|
|
@ -575,11 +575,13 @@ class Httpd:
|
|||
return
|
||||
local_dir = os.path.dirname(inspect.getfile(Httpd))
|
||||
out_dir = os.path.join(self.env.gen_dir, 'mod_curltest')
|
||||
in_source = os.path.join(local_dir, 'mod_curltest/mod_curltest.c')
|
||||
out_source = os.path.join(out_dir, 'mod_curltest.c')
|
||||
if not os.path.exists(out_dir):
|
||||
os.mkdir(out_dir)
|
||||
if not os.path.exists(out_source):
|
||||
shutil.copy(os.path.join(local_dir, 'mod_curltest/mod_curltest.c'), out_source)
|
||||
if not os.path.exists(out_source) or \
|
||||
os.stat(in_source).st_mtime > os.stat(out_source).st_mtime:
|
||||
shutil.copy(in_source, out_source)
|
||||
p = subprocess.run([
|
||||
self.env.apxs, '-c', out_source
|
||||
], capture_output=True, cwd=out_dir)
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ static int curltest_echo_handler(request_rec *r)
|
|||
char buffer[8192];
|
||||
const char *ct;
|
||||
apr_off_t die_after_len = -1, total_read_len = 0;
|
||||
apr_time_t read_delay = 0;
|
||||
int just_die = 0, die_after_100 = 0;
|
||||
long l;
|
||||
|
||||
|
|
@ -221,6 +222,12 @@ static int curltest_echo_handler(request_rec *r)
|
|||
die_after_100 = 1;
|
||||
continue;
|
||||
}
|
||||
else if(!strcmp("read_delay", arg)) {
|
||||
rv = duration_parse(&read_delay, val, "s");
|
||||
if(APR_SUCCESS == rv) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -258,6 +265,12 @@ static int curltest_echo_handler(request_rec *r)
|
|||
apr_table_setn(r->headers_out, "Request-TE",
|
||||
apr_table_get(r->headers_in, "TE"));
|
||||
|
||||
if(read_delay) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r,
|
||||
"put_handler: read_delay");
|
||||
apr_sleep(read_delay);
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
/* copy any request body into the response */
|
||||
rv = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
|
||||
|
|
@ -637,6 +650,8 @@ static int curltest_put_handler(request_rec *r)
|
|||
ap_set_content_type(r, ct ? ct : "text/plain");
|
||||
|
||||
if(read_delay) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r,
|
||||
"put_handler: read_delay");
|
||||
apr_sleep(read_delay);
|
||||
}
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue