diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2017-04-02 14:32:28 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2017-04-02 14:32:28 +0300 |
commit | 96e4e84ce273664d0ee43c5c5b7d14efa6f86d39 (patch) | |
tree | ced1313613d1fbfe5036106c62a0e5377f6175c8 /src/http/modules/perl/ngx_http_perl_module.c | |
parent | fae6878f202b13f0ffe39f75fe19fa15e179e9d5 (diff) | |
download | nginx-96e4e84ce273664d0ee43c5c5b7d14efa6f86d39.tar.gz nginx-96e4e84ce273664d0ee43c5c5b7d14efa6f86d39.zip |
Perl: fixed delaying subrequests.
Much like in limit_req, use the wev->delayed flag to ensure proper handling
and interoperability with limit_rate.
Diffstat (limited to 'src/http/modules/perl/ngx_http_perl_module.c')
-rw-r--r-- | src/http/modules/perl/ngx_http_perl_module.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c index 279631974..79ded0f2f 100644 --- a/src/http/modules/perl/ngx_http_perl_module.c +++ b/src/http/modules/perl/ngx_http_perl_module.c @@ -278,15 +278,19 @@ ngx_http_perl_sleep_handler(ngx_http_request_t *r) 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); } |