mirror of
https://github.com/nginx/nginx.git
synced 2024-12-22 15:13:28 -06:00
Copy filter: wake up subrequests after aio operations.
Previously, connection write handler was called, resulting in wake up of the active subrequest. This change makes it possible to read data in non-active subrequests as well. For example, this allows SSI to process instructions in non-active subrequests earlier and start additional subrequests if needed, reducing overall response time.
This commit is contained in:
parent
a450865b5a
commit
1f76260583
@ -187,15 +187,24 @@ static void
|
|||||||
ngx_http_copy_aio_event_handler(ngx_event_t *ev)
|
ngx_http_copy_aio_event_handler(ngx_event_t *ev)
|
||||||
{
|
{
|
||||||
ngx_event_aio_t *aio;
|
ngx_event_aio_t *aio;
|
||||||
|
ngx_connection_t *c;
|
||||||
ngx_http_request_t *r;
|
ngx_http_request_t *r;
|
||||||
|
|
||||||
aio = ev->data;
|
aio = ev->data;
|
||||||
r = aio->data;
|
r = aio->data;
|
||||||
|
c = r->connection;
|
||||||
|
|
||||||
|
ngx_http_set_log_request(c->log, r);
|
||||||
|
|
||||||
|
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||||
|
"http aio: \"%V?%V\"", &r->uri, &r->args);
|
||||||
|
|
||||||
r->main->blocked--;
|
r->main->blocked--;
|
||||||
r->aio = 0;
|
r->aio = 0;
|
||||||
|
|
||||||
r->connection->write->handler(r->connection->write);
|
r->write_event_handler(r);
|
||||||
|
|
||||||
|
ngx_http_run_posted_requests(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -300,14 +309,33 @@ ngx_http_copy_thread_handler(ngx_thread_task_t *task, ngx_file_t *file)
|
|||||||
static void
|
static void
|
||||||
ngx_http_copy_thread_event_handler(ngx_event_t *ev)
|
ngx_http_copy_thread_event_handler(ngx_event_t *ev)
|
||||||
{
|
{
|
||||||
|
ngx_connection_t *c;
|
||||||
ngx_http_request_t *r;
|
ngx_http_request_t *r;
|
||||||
|
|
||||||
r = ev->data;
|
r = ev->data;
|
||||||
|
c = r->connection;
|
||||||
|
|
||||||
|
ngx_http_set_log_request(c->log, r);
|
||||||
|
|
||||||
|
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||||
|
"http thread: \"%V?%V\"", &r->uri, &r->args);
|
||||||
|
|
||||||
r->main->blocked--;
|
r->main->blocked--;
|
||||||
r->aio = 0;
|
r->aio = 0;
|
||||||
|
|
||||||
r->connection->write->handler(r->connection->write);
|
if (r->done) {
|
||||||
|
/*
|
||||||
|
* trigger connection event handler if the subrequest was
|
||||||
|
* already finalized; this can happen if the handler is used
|
||||||
|
* for sendfile() in threads
|
||||||
|
*/
|
||||||
|
|
||||||
|
c->write->handler(c->write);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
r->write_event_handler(r);
|
||||||
|
ngx_http_run_posted_requests(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user