aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_darwin_sendfile_chain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix/ngx_darwin_sendfile_chain.c')
-rw-r--r--src/os/unix/ngx_darwin_sendfile_chain.c27
1 files changed, 3 insertions, 24 deletions
diff --git a/src/os/unix/ngx_darwin_sendfile_chain.c b/src/os/unix/ngx_darwin_sendfile_chain.c
index d98fd74b0..a85269dcd 100644
--- a/src/os/unix/ngx_darwin_sendfile_chain.c
+++ b/src/os/unix/ngx_darwin_sendfile_chain.c
@@ -31,7 +31,7 @@ ngx_chain_t *
ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
{
int rc;
- off_t size, send, prev_send, aligned, sent, fprev;
+ off_t send, prev_send, sent;
off_t file_size;
ngx_uint_t eintr;
ngx_err_t err;
@@ -95,30 +95,9 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* coalesce the neighbouring file bufs */
- do {
- size = cl->buf->file_last - cl->buf->file_pos;
+ file_size = ngx_chain_coalesce_file(&cl, limit - send);
- if (send + size > limit) {
- size = limit - send;
-
- aligned = (cl->buf->file_pos + size + ngx_pagesize - 1)
- & ~((off_t) ngx_pagesize - 1);
-
- if (aligned <= cl->buf->file_last) {
- size = aligned - cl->buf->file_pos;
- }
- }
-
- file_size += 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 && header.count == 0) {