Upstream: sendfile_max_chunk support.
Previously, connections to upstream servers used sendfile() if it was enabled, but never honored sendfile_max_chunk. This might result in worker monopolization for a long time if large request bodies are allowed.
This commit is contained in:
parent
6b0d773fbd
commit
b3b368184b
@ -803,6 +803,10 @@ ngx_chain_writer(void *data, ngx_chain_t *in)
|
|||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chain && c->write->ready) {
|
||||||
|
ngx_post_event(c->write, &ngx_posted_next_events);
|
||||||
|
}
|
||||||
|
|
||||||
for (cl = ctx->out; cl && cl != chain; /* void */) {
|
for (cl = ctx->out; cl && cl != chain; /* void */) {
|
||||||
ln = cl;
|
ln = cl;
|
||||||
cl = cl->next;
|
cl = cl->next;
|
||||||
|
@ -1511,8 +1511,9 @@ ngx_http_upstream_check_broken_connection(ngx_http_request_t *r,
|
|||||||
static void
|
static void
|
||||||
ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
||||||
{
|
{
|
||||||
ngx_int_t rc;
|
ngx_int_t rc;
|
||||||
ngx_connection_t *c;
|
ngx_connection_t *c;
|
||||||
|
ngx_http_core_loc_conf_t *clcf;
|
||||||
|
|
||||||
r->connection->log->action = "connecting to upstream";
|
r->connection->log->action = "connecting to upstream";
|
||||||
|
|
||||||
@ -1599,10 +1600,12 @@ ngx_http_upstream_connect(ngx_http_request_t *r, ngx_http_upstream_t *u)
|
|||||||
|
|
||||||
/* init or reinit the ngx_output_chain() and ngx_chain_writer() contexts */
|
/* init or reinit the ngx_output_chain() and ngx_chain_writer() contexts */
|
||||||
|
|
||||||
|
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
||||||
|
|
||||||
u->writer.out = NULL;
|
u->writer.out = NULL;
|
||||||
u->writer.last = &u->writer.out;
|
u->writer.last = &u->writer.out;
|
||||||
u->writer.connection = c;
|
u->writer.connection = c;
|
||||||
u->writer.limit = 0;
|
u->writer.limit = clcf->sendfile_max_chunk;
|
||||||
|
|
||||||
if (u->request_sent) {
|
if (u->request_sent) {
|
||||||
if (ngx_http_upstream_reinit(r, u) != NGX_OK) {
|
if (ngx_http_upstream_reinit(r, u) != NGX_OK) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user