mirror of
https://github.com/nginx/nginx.git
synced 2025-06-09 02:42:48 +08:00
Perl: fixed delaying subrequests.
Much like in limit_req, use the wev->delayed flag to ensure proper handling and interoperability with limit_rate.
This commit is contained in:
parent
fae6878f20
commit
96e4e84ce2
@ -1001,6 +1001,7 @@ sleep(r, sleep, next)
|
|||||||
|
|
||||||
ctx->next = SvRV(ST(2));
|
ctx->next = SvRV(ST(2));
|
||||||
|
|
||||||
|
r->connection->write->delayed = 1;
|
||||||
ngx_add_timer(r->connection->write, sleep);
|
ngx_add_timer(r->connection->write, sleep);
|
||||||
|
|
||||||
r->write_event_handler = ngx_http_perl_sleep_handler;
|
r->write_event_handler = ngx_http_perl_sleep_handler;
|
||||||
|
@ -278,15 +278,19 @@ ngx_http_perl_sleep_handler(ngx_http_request_t *r)
|
|||||||
|
|
||||||
wev = r->connection->write;
|
wev = r->connection->write;
|
||||||
|
|
||||||
if (wev->timedout) {
|
if (wev->delayed && !wev->timedout) {
|
||||||
wev->timedout = 0;
|
|
||||||
ngx_http_perl_handle_request(r);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ngx_handle_write_event(wev, 0) != NGX_OK) {
|
if (ngx_handle_write_event(wev, 0) != NGX_OK) {
|
||||||
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wev->delayed = 0;
|
||||||
|
wev->timedout = 0;
|
||||||
|
|
||||||
|
ngx_http_perl_handle_request(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user