aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_linux_sendfile_chain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/unix/ngx_linux_sendfile_chain.c')
-rw-r--r--src/os/unix/ngx_linux_sendfile_chain.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index 97f741d0a..9f272225a 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -354,6 +354,17 @@ ngx_linux_sendfile_thread(ngx_connection_t *c, ngx_buf_t *file, size_t size,
return (ctx->sent == ctx->size) ? NGX_DONE : NGX_AGAIN;
}
+ if (task->event.active && ctx->file == file) {
+ /*
+ * tolerate duplicate calls; they can happen due to subrequests
+ * or multiple calls of the next body filter from a filter
+ */
+
+ *sent = 0;
+
+ return NGX_OK;
+ }
+
ctx->file = file;
ctx->socket = c->fd;
ctx->size = size;