fix memory leaks, use unlocked ngx_resolver_free() for seldom failed cases
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index 15181da..d3e6c43 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -212,14 +212,13 @@
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 @@
/* 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 @@
/* 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 @@
/* 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 */
}