aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-01-29 14:35:23 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-01-29 14:35:23 +0000
commit9258872c2a028f121fcc7b7199e90334ad9466db (patch)
treee5d7d9bf935ba8ecd8888cbd611ce12c7473b821 /src
parentfa748fe12071ede6128fc4e7b905d2942b302476 (diff)
downloadnginx-9258872c2a028f121fcc7b7199e90334ad9466db.tar.gz
nginx-9258872c2a028f121fcc7b7199e90334ad9466db.zip
store name pointer in variable allocated on stack
as resolver ctx may be already deallocated at this point
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_resolver.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index a49143c7f..8e8d524d9 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -578,6 +578,7 @@ failed:
ngx_int_t
ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
{
+ u_char *name;
ngx_resolver_t *r;
ngx_resolver_node_t *rn;
@@ -601,19 +602,21 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
ngx_queue_insert_head(&r->addr_expire_queue, &rn->queue);
- ctx->name.len = rn->nlen;
- ctx->name.data = ngx_resolver_dup(r, rn->name, rn->nlen);
- if (ctx->name.data == NULL) {
+ name = ngx_resolver_dup(r, rn->name, rn->nlen);
+ if (name == NULL) {
goto failed;
}
+ ctx->name.len = rn->nlen;
+ ctx->name.data = name;
+
/* unlock addr mutex */
ctx->state = NGX_OK;
ctx->handler(ctx);
- ngx_resolver_free(r, ctx->name.data);
+ ngx_resolver_free(r, name);
return NGX_OK;
}