mirror of
https://github.com/nginx/nginx.git
synced 2024-12-19 05:33:52 -06:00
Allowed up to two EBUSY errors from sendfile().
Fallback to synchronous sendfile() now only done on 3rd EBUSY without any progress in a row. Not falling back is believed to be better in case of occasional EBUSY, though protection is still needed to make sure there will be no infinite loop.
This commit is contained in:
parent
2539ce036f
commit
9a72030c25
@ -177,6 +177,7 @@ struct ngx_connection_s {
|
||||
|
||||
#if (NGX_HAVE_AIO_SENDFILE)
|
||||
unsigned aio_sendfile:1;
|
||||
unsigned busy_count:2;
|
||||
ngx_buf_t *busy_sendfile;
|
||||
#endif
|
||||
|
||||
|
@ -169,13 +169,15 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
offset = c->busy_sendfile->file_pos;
|
||||
|
||||
if (file->aio) {
|
||||
c->aio_sendfile = (offset != file->aio->last_offset);
|
||||
c->busy_count = (offset == file->aio->last_offset) ?
|
||||
c->busy_count + 1 : 0;
|
||||
file->aio->last_offset = offset;
|
||||
|
||||
if (c->aio_sendfile == 0) {
|
||||
if (c->busy_count > 2) {
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, 0,
|
||||
"sendfile(%V) returned busy again",
|
||||
&file->name);
|
||||
c->aio_sendfile = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user