mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
fix memory leak on resolver query send failure
This commit is contained in:
parent
f576f0d2bc
commit
949aea4dfe
@ -453,6 +453,7 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
|||||||
/* lock alloc mutex */
|
/* lock alloc mutex */
|
||||||
|
|
||||||
ngx_resolver_free_locked(r, rn->query);
|
ngx_resolver_free_locked(r, rn->query);
|
||||||
|
rn->query = NULL;
|
||||||
|
|
||||||
if (rn->cnlen) {
|
if (rn->cnlen) {
|
||||||
ngx_resolver_free_locked(r, rn->u.cname);
|
ngx_resolver_free_locked(r, rn->u.cname);
|
||||||
@ -479,6 +480,7 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
|||||||
|
|
||||||
rn->node.key = hash;
|
rn->node.key = hash;
|
||||||
rn->nlen = (u_short) ctx->name.len;
|
rn->nlen = (u_short) ctx->name.len;
|
||||||
|
rn->query = NULL;
|
||||||
|
|
||||||
ngx_rbtree_insert(&r->name_rbtree, &rn->node);
|
ngx_rbtree_insert(&r->name_rbtree, &rn->node);
|
||||||
}
|
}
|
||||||
@ -526,6 +528,10 @@ failed:
|
|||||||
|
|
||||||
ngx_rbtree_delete(&r->name_rbtree, &rn->node);
|
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->name);
|
||||||
|
|
||||||
ngx_resolver_free(r, rn);
|
ngx_resolver_free(r, rn);
|
||||||
@ -588,6 +594,7 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
|
|||||||
ngx_queue_remove(&rn->queue);
|
ngx_queue_remove(&rn->queue);
|
||||||
|
|
||||||
ngx_resolver_free(r, rn->query);
|
ngx_resolver_free(r, rn->query);
|
||||||
|
rn->query = NULL;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
rn = ngx_resolver_alloc(r, sizeof(ngx_resolver_node_t));
|
rn = ngx_resolver_alloc(r, sizeof(ngx_resolver_node_t));
|
||||||
@ -596,6 +603,7 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rn->node.key = ctx->addr;
|
rn->node.key = ctx->addr;
|
||||||
|
rn->query = NULL;
|
||||||
|
|
||||||
ngx_rbtree_insert(&r->addr_rbtree, &rn->node);
|
ngx_rbtree_insert(&r->addr_rbtree, &rn->node);
|
||||||
}
|
}
|
||||||
@ -646,6 +654,10 @@ failed:
|
|||||||
if (rn) {
|
if (rn) {
|
||||||
ngx_rbtree_delete(&r->addr_rbtree, &rn->node);
|
ngx_rbtree_delete(&r->addr_rbtree, &rn->node);
|
||||||
|
|
||||||
|
if (rn->query) {
|
||||||
|
ngx_resolver_free(r, rn->query);
|
||||||
|
}
|
||||||
|
|
||||||
ngx_resolver_free(r, rn);
|
ngx_resolver_free(r, rn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user