Mercurial > hg > nginx-vendor-current
diff src/http/modules/perl/ngx_http_perl_module.c @ 356:b743d290eb3b NGINX_0_6_22
nginx 0.6.22
*) Change: now all ngx_http_perl_module methods return values copied to
perl's allocated memory.
*) Bugfix: if nginx was built with ngx_http_perl_module, the perl
before 5.8.6 was used, and perl supported threads, then during
reconfiguration the master process aborted; bug appeared in
0.5.9.
Thanks to Boris Zhmurov.
*) Bugfix: the ngx_http_perl_module methods may get invalid values of
the regex captures.
*) Bugfix: a segmentation fault occurred in worker process, if the
$r->has_request_body() method was called for a request whose small
request body was already received.
*) Bugfix: large_client_header_buffers did not freed before going to
keep-alive state.
Thanks to Olexander Shtepa.
*) Bugfix: the last address was missed in the $upstream_addr variable;
bug appeared in 0.6.18.
*) Bugfix: the "fastcgi_catch_stderr" directive did return error code;
now it returns 502 code, that can be rerouted to a next server using
the "fastcgi_next_upstream invalid_header" directive.
*) Bugfix: a segmentation fault occurred in master process if the
"fastcgi_catch_stderr" directive was used; bug appeared in
0.6.10.
Thanks to Manlio Perillo.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 19 Dec 2007 00:00:00 +0300 |
parents | 10cc350ed8a1 |
children | babd3d9efb62 |
line wrap: on
line diff
--- a/src/http/modules/perl/ngx_http_perl_module.c +++ b/src/http/modules/perl/ngx_http_perl_module.c @@ -230,6 +230,10 @@ ngx_http_perl_handle_request(ngx_http_re } + if (rc == NGX_DONE) { + return; + } + if (rc > 600) { rc = NGX_OK; } @@ -627,12 +631,13 @@ static ngx_int_t ngx_http_perl_call_handler(pTHX_ ngx_http_request_t *r, HV *nginx, SV *sub, ngx_str_t **args, ngx_str_t *handler, ngx_str_t *rv) { - SV *sv; - int n, status; - char *line; - STRLEN len, n_a; - ngx_str_t err; - ngx_uint_t i; + SV *sv; + int n, status; + char *line; + STRLEN len, n_a; + ngx_str_t err; + ngx_uint_t i; + ngx_connection_t *c; dSP; @@ -658,15 +663,26 @@ ngx_http_perl_call_handler(pTHX_ ngx_htt PUTBACK; + c = r->connection; + n = call_sv(sub, G_EVAL); SPAGAIN; + if (c->destroyed) { + PUTBACK; + + FREETMPS; + LEAVE; + + return NGX_DONE; + } + if (n) { if (rv == NULL) { status = POPi; - ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "call_sv: %d", status); } else { @@ -697,9 +713,8 @@ ngx_http_perl_call_handler(pTHX_ ngx_htt } err.len = len + 1; - ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, - "call_sv(\"%V\") failed: \"%V\"", - handler, &err); + ngx_log_error(NGX_LOG_ERR, c->log, 0, + "call_sv(\"%V\") failed: \"%V\"", handler, &err); if (rv) { return NGX_ERROR; @@ -709,7 +724,7 @@ ngx_http_perl_call_handler(pTHX_ ngx_htt } if (n != 1) { - ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, + ngx_log_error(NGX_LOG_ALERT, c->log, 0, "call_sv(\"%V\") returned %d results", handler, n); status = NGX_OK; }