comparison src/http/modules/perl/ngx_http_perl_module.c @ 6960:1c5e5e5b008d

Perl: fixed delaying subrequests. Much like in limit_req, use the wev->delayed flag to ensure proper handling and interoperability with limit_rate.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 02 Apr 2017 14:32:28 +0300
parents eada22643e8b
children 903fb1ddc07f
comparison
equal deleted inserted replaced
6959:7fcf209d40c8 6960:1c5e5e5b008d
276 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, 276 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
277 "perl sleep handler"); 277 "perl sleep handler");
278 278
279 wev = r->connection->write; 279 wev = r->connection->write;
280 280
281 if (wev->timedout) { 281 if (wev->delayed && !wev->timedout) {
282 wev->timedout = 0; 282
283 ngx_http_perl_handle_request(r); 283 if (ngx_handle_write_event(wev, 0) != NGX_OK) {
284 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
285 }
286
284 return; 287 return;
285 } 288 }
286 289
287 if (ngx_handle_write_event(wev, 0) != NGX_OK) { 290 wev->delayed = 0;
288 ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); 291 wev->timedout = 0;
289 } 292
293 ngx_http_perl_handle_request(r);
290 } 294 }
291 295
292 296
293 static ngx_int_t 297 static ngx_int_t
294 ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, 298 ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,