Mercurial > hg > nginx-quic
diff src/os/unix/ngx_linux_sendfile_chain.c @ 5915:ac3f78219f85
Moved the code for coalescing file buffers to a separate function.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 13 Aug 2014 15:11:45 +0400 |
parents | 8e903522c17a |
children | e044893b4587 |
line wrap: on
line diff
--- a/src/os/unix/ngx_linux_sendfile_chain.c +++ b/src/os/unix/ngx_linux_sendfile_chain.c @@ -31,7 +31,7 @@ ngx_chain_t * ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) { int rc, tcp_nodelay; - off_t size, send, prev_send, aligned, sent, fprev; + off_t send, prev_send, sent; size_t file_size; ngx_err_t err; ngx_buf_t *file; @@ -153,30 +153,9 @@ ngx_linux_sendfile_chain(ngx_connection_ /* coalesce the neighbouring file bufs */ - do { - size = cl->buf->file_last - cl->buf->file_pos; - - if (send + size > limit) { - size = limit - send; - - aligned = (cl->buf->file_pos + size + ngx_pagesize - 1) - & ~((off_t) ngx_pagesize - 1); + file_size = (size_t) ngx_chain_coalesce_file(&cl, limit - send); - if (aligned <= cl->buf->file_last) { - size = aligned - cl->buf->file_pos; - } - } - - file_size += (size_t) size; - send += size; - fprev = cl->buf->file_pos + size; - cl = cl->next; - - } while (cl - && cl->buf->in_file - && send < limit - && file->file->fd == cl->buf->file->fd - && fprev == cl->buf->file_pos); + send += file_size; } if (file) {