mirror of
https://github.com/nginx/nginx.git
synced 2025-06-10 19:42:39 +08:00
Simplified sendfile_max_chunk handling.
Previously, it was checked that sendfile_max_chunk was enabled and almost whole sendfile_max_chunk was sent (see e67ef50c3176), to avoid delaying connections where sendfile_max_chunk wasn't reached (for example, when sending responses smaller than sendfile_max_chunk). Now we instead check if there are unsent data, and the connection is still ready for writing. Additionally we also check c->write->delayed to ignore connections already delayed by limit_rate. This approach is believed to be more robust, and correctly handles not only sendfile_max_chunk, but also internal limits of c->send_chain(), such as sendfile() maximum supported length (ticket #1870).
This commit is contained in:
parent
f3fdc4c96f
commit
00f4be1ce4
@ -321,16 +321,12 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
delay = (ngx_msec_t) ((nsent - sent) * 1000 / r->limit_rate);
|
||||
|
||||
if (delay > 0) {
|
||||
limit = 0;
|
||||
c->write->delayed = 1;
|
||||
ngx_add_timer(c->write, delay);
|
||||
}
|
||||
}
|
||||
|
||||
if (limit
|
||||
&& c->write->ready
|
||||
&& c->sent - sent >= limit - (off_t) (2 * ngx_pagesize))
|
||||
{
|
||||
if (chain && c->write->ready && !c->write->delayed) {
|
||||
ngx_post_event(c->write, &ngx_posted_next_events);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user