Mercurial > hg > nginx
changeset 1960:1609b3c3d604
fix memory leak on resolver query send failure
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 09 Apr 2008 14:26:08 +0000 |
parents | 4f16186f5603 |
children | 99b9feacccb4 |
files | src/core/ngx_resolver.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_resolver.c Wed Apr 09 14:20:17 2008 +0000 +++ b/src/core/ngx_resolver.c Wed Apr 09 14:26:08 2008 +0000 @@ -453,6 +453,7 @@ /* lock alloc mutex */ ngx_resolver_free_locked(r, rn->query); + rn->query = NULL; if (rn->cnlen) { ngx_resolver_free_locked(r, rn->u.cname); @@ -479,6 +480,7 @@ rn->node.key = hash; rn->nlen = (u_short) ctx->name.len; + rn->query = NULL; ngx_rbtree_insert(&r->name_rbtree, &rn->node); } @@ -526,6 +528,10 @@ ngx_rbtree_delete(&r->name_rbtree, &rn->node); + if (rn->query) { + ngx_resolver_free(r, rn->query); + } + ngx_resolver_free(r, rn->name); ngx_resolver_free(r, rn); @@ -588,6 +594,7 @@ ngx_queue_remove(&rn->queue); ngx_resolver_free(r, rn->query); + rn->query = NULL; } else { rn = ngx_resolver_alloc(r, sizeof(ngx_resolver_node_t)); @@ -596,6 +603,7 @@ } rn->node.key = ctx->addr; + rn->query = NULL; ngx_rbtree_insert(&r->addr_rbtree, &rn->node); } @@ -646,6 +654,10 @@ if (rn) { ngx_rbtree_delete(&r->addr_rbtree, &rn->node); + if (rn->query) { + ngx_resolver_free(r, rn->query); + } + ngx_resolver_free(r, rn); }