Much like in limit_req, use the wev->delayed flag to ensure proper handling
and interoperability with limit_rate.
ctx->next = SvRV(ST(2));
+ r->connection->write->delayed = 1;
ngx_add_timer(r->connection->write, sleep);
r->write_event_handler = ngx_http_perl_sleep_handler;
wev = r->connection->write;
- if (wev->timedout) {
- wev->timedout = 0;
- ngx_http_perl_handle_request(r);
+ if (wev->delayed && !wev->timedout) {
+
+ if (ngx_handle_write_event(wev, 0) != NGX_OK) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ }
+
return;
}
- if (ngx_handle_write_event(wev, 0) != NGX_OK) {
- ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
- }
+ wev->delayed = 0;
+ wev->timedout = 0;
+
+ ngx_http_perl_handle_request(r);
}