mirror of
https://github.com/nginx/nginx.git
synced 2024-12-21 06:33:50 -06:00
retry aio sendfile if data are ready
This commit is contained in:
parent
06bb9d294a
commit
9f9054df82
@ -133,6 +133,7 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
r->request_output = 1;
|
||||
}
|
||||
|
||||
for ( ;; ) {
|
||||
rc = ngx_output_chain(ctx, in);
|
||||
|
||||
if (ctx->in == NULL) {
|
||||
@ -148,6 +149,7 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
#if (NGX_HAVE_FILE_AIO && NGX_HAVE_AIO_SENDFILE)
|
||||
|
||||
if (c->busy_sendfile) {
|
||||
ssize_t n;
|
||||
off_t offset;
|
||||
ngx_file_t *file;
|
||||
ngx_http_ephemeral_t *e;
|
||||
@ -161,14 +163,21 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
|
||||
if (c->aio_sendfile == 0) {
|
||||
ngx_log_error(NGX_LOG_ALERT, c->log, 0,
|
||||
"sendfile(%V) returned busy again", &file->name);
|
||||
"sendfile(%V) returned busy again",
|
||||
&file->name);
|
||||
}
|
||||
}
|
||||
|
||||
c->busy_sendfile = NULL;
|
||||
e = (ngx_http_ephemeral_t *) &r->uri_start;
|
||||
|
||||
(void) ngx_file_aio_read(file, e->preload, 4, offset, r->pool);
|
||||
n = ngx_file_aio_read(file, e->preload, 4, offset, r->pool);
|
||||
|
||||
if (n > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
rc = n;
|
||||
|
||||
if (file->aio) {
|
||||
file->aio->data = r;
|
||||
@ -178,11 +187,11 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
||||
r->aio = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if (NGX_HAVE_FILE_AIO)
|
||||
|
Loading…
Reference in New Issue
Block a user