From 7c4cf27aff2129adf7fc48b85a4e41c13bc34635 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Thu, 28 Feb 2008 20:09:39 +0000 Subject: [PATCH] fix memory leaks, use unlocked ngx_resolver_free() for seldom failed cases --- src/core/ngx_resolver.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index 15181dae6..d3e6c43c1 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -212,14 +212,13 @@ ngx_resolve_name(ngx_resolver_ctx_t *ctx) return NGX_OK; } - /* lock alloc mutex */ + /* NGX_ERROR */ if (ctx->event) { - ngx_resolver_free_locked(r, ctx->event); - ctx->event = NULL; + ngx_resolver_free(r, ctx->event); } - /* unlock alloc mutex */ + ngx_resolver_free(r, ctx); return NGX_ERROR; } @@ -280,7 +279,15 @@ done: /* unlock name mutex */ - ngx_resolver_free(r, ctx); + /* lock alloc mutex */ + + if (ctx->event) { + ngx_resolver_free_locked(r, ctx->event); + } + + ngx_resolver_free_locked(r, ctx); + + /* unlock alloc mutex */ } @@ -573,15 +580,11 @@ failed: /* unlock addr mutex */ - /* lock alloc mutex */ - if (ctx->event) { - ngx_resolver_free_locked(r, ctx->event); + ngx_resolver_free(r, ctx->event); } - ngx_resolver_free_locked(r, ctx); - - /* unlock alloc mutex */ + ngx_resolver_free(r, ctx); return NGX_ERROR; } @@ -640,7 +643,15 @@ done: /* unlock addr mutex */ - ngx_resolver_free(r, ctx); + /* lock alloc mutex */ + + if (ctx->event) { + ngx_resolver_free_locked(r, ctx->event); + } + + ngx_resolver_free_locked(r, ctx); + + /* unlock alloc mutex */ }