aboutsummaryrefslogtreecommitdiff
path: root/src/http/modules/perl/ngx_http_perl_module.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-11-25 23:27:06 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-11-25 23:27:06 +0000
commitfab5acdd281c87bafded9f4fa97e494ce944098c (patch)
tree1c22dd9a3ab504eee8c6562403ef1ffea1fc147e /src/http/modules/perl/ngx_http_perl_module.c
parentb5602b113ab5902035a54d5e06e8511b6f5380a2 (diff)
downloadnginx-fab5acdd281c87bafded9f4fa97e494ce944098c.tar.gz
nginx-fab5acdd281c87bafded9f4fa97e494ce944098c.zip
fix recursive perl_set variable call
Diffstat (limited to 'src/http/modules/perl/ngx_http_perl_module.c')
-rw-r--r--src/http/modules/perl/ngx_http_perl_module.c22
1 files changed, 16 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 53b2f49cb..a5f27dc9f 100644
--- a/src/http/modules/perl/ngx_http_perl_module.c
+++ b/src/http/modules/perl/ngx_http_perl_module.c
@@ -300,6 +300,7 @@ ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
ngx_http_perl_variable_t *pv = (ngx_http_perl_variable_t *) data;
ngx_int_t rc;
+ ngx_uint_t recursive;
ngx_str_t value;
ngx_http_perl_ctx_t *ctx;
ngx_http_perl_main_conf_t *pmcf;
@@ -316,14 +317,21 @@ ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
}
ngx_http_set_ctx(r, ctx, ngx_http_perl_module);
- }
- pmcf = ngx_http_get_module_main_conf(r, ngx_http_perl_module);
+ pmcf = ngx_http_get_module_main_conf(r, ngx_http_perl_module);
- rc = ngx_http_perl_get_interpreter(pmcf, &ctx->perl, r->connection->log);
+ rc = ngx_http_perl_get_interpreter(pmcf, &ctx->perl,
+ r->connection->log);
- if (rc != NGX_OK) {
- return rc;
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
+ recursive = 0;
+
+ } else {
+ pmcf = NULL;
+ recursive = 1;
}
value.data = NULL;
@@ -337,7 +345,9 @@ ngx_http_perl_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
}
- ngx_http_perl_free_interpreter(pmcf, ctx->perl);
+ if (recursive == 0) {
+ ngx_http_perl_free_interpreter(pmcf, ctx->perl);
+ }
if (value.data) {
v->len = value.len;