Mercurial > hg > nginx
changeset 1197:493a227edfd5
sendfile_max_chunk
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 May 2007 06:33:39 +0000 |
parents | 67077918b965 |
children | f4d6c84c69f9 |
files | src/http/ngx_http_core_module.c src/http/ngx_http_core_module.h src/http/ngx_http_write_filter_module.c |
diffstat | 3 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c Mon May 07 06:27:14 2007 +0000 +++ b/src/http/ngx_http_core_module.c Mon May 07 06:33:39 2007 +0000 @@ -295,6 +295,13 @@ offsetof(ngx_http_core_loc_conf_t, sendfile), NULL }, + { ngx_string("sendfile_max_chunk"), + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, + ngx_conf_set_size_slot, + NGX_HTTP_LOC_CONF_OFFSET, + offsetof(ngx_http_core_loc_conf_t, sendfile_max_chunk), + NULL }, + { ngx_string("tcp_nopush"), NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG, ngx_conf_set_flag_slot, @@ -2191,6 +2198,7 @@ lcf->internal = NGX_CONF_UNSET; lcf->client_body_in_file_only = NGX_CONF_UNSET; lcf->sendfile = NGX_CONF_UNSET; + lcf->sendfile_max_chunk = NGX_CONF_UNSET_SIZE; lcf->tcp_nopush = NGX_CONF_UNSET; lcf->tcp_nodelay = NGX_CONF_UNSET; lcf->send_timeout = NGX_CONF_UNSET_MSEC; @@ -2359,6 +2367,8 @@ ngx_conf_merge_value(conf->client_body_in_file_only, prev->client_body_in_file_only, 0); ngx_conf_merge_value(conf->sendfile, prev->sendfile, 0); + ngx_conf_merge_size_value(conf->sendfile_max_chunk, + prev->sendfile_max_chunk, 0); ngx_conf_merge_value(conf->tcp_nopush, prev->tcp_nopush, 0); ngx_conf_merge_value(conf->tcp_nodelay, prev->tcp_nodelay, 1);
--- a/src/http/ngx_http_core_module.h Mon May 07 06:27:14 2007 +0000 +++ b/src/http/ngx_http_core_module.h Mon May 07 06:33:39 2007 +0000 @@ -245,6 +245,7 @@ size_t send_lowat; /* send_lowat */ size_t postpone_output; /* postpone_output */ size_t limit_rate; /* limit_rate */ + size_t sendfile_max_chunk; /* sendfile_max_chunk */ ngx_msec_t client_body_timeout; /* client_body_timeout */ ngx_msec_t send_timeout; /* send_timeout */
--- a/src/http/ngx_http_write_filter_module.c Mon May 07 06:27:14 2007 +0000 +++ b/src/http/ngx_http_write_filter_module.c Mon May 07 06:33:39 2007 +0000 @@ -222,6 +222,9 @@ return NGX_AGAIN; } + } else if (clcf->sendfile_max_chunk) { + limit = clcf->sendfile_max_chunk; + } else { limit = 0; } @@ -241,10 +244,14 @@ return NGX_ERROR; } - if (limit) { + if (r->limit_rate) { sent = c->sent - sent; c->write->delayed = 1; ngx_add_timer(c->write, (ngx_msec_t) (sent * 1000 / r->limit_rate + 1)); + + } else if (c->write->ready && clcf->sendfile_max_chunk) { + c->write->delayed = 1; + ngx_add_timer(c->write, 1); } for (cl = r->out; cl && cl != chain; /* void */) {