Mercurial > hg > nginx
comparison src/core/ngx_resolver.c @ 1904:538f06aa8118
fix memory leaks, use unlocked ngx_resolver_free() for seldom failed cases
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 28 Feb 2008 20:09:39 +0000 |
parents | 1ea922585517 |
children | 4a8c9139e579 |
comparison
equal
deleted
inserted
replaced
1903:1ea922585517 | 1904:538f06aa8118 |
---|---|
210 | 210 |
211 if (rc == NGX_AGAIN) { | 211 if (rc == NGX_AGAIN) { |
212 return NGX_OK; | 212 return NGX_OK; |
213 } | 213 } |
214 | 214 |
215 /* lock alloc mutex */ | 215 /* NGX_ERROR */ |
216 | 216 |
217 if (ctx->event) { | 217 if (ctx->event) { |
218 ngx_resolver_free_locked(r, ctx->event); | 218 ngx_resolver_free(r, ctx->event); |
219 ctx->event = NULL; | 219 } |
220 } | 220 |
221 | 221 ngx_resolver_free(r, ctx); |
222 /* unlock alloc mutex */ | |
223 | 222 |
224 return NGX_ERROR; | 223 return NGX_ERROR; |
225 } | 224 } |
226 | 225 |
227 | 226 |
278 | 277 |
279 ngx_resolver_expire(r, &r->name_rbtree, &r->name_expire_queue); | 278 ngx_resolver_expire(r, &r->name_rbtree, &r->name_expire_queue); |
280 | 279 |
281 /* unlock name mutex */ | 280 /* unlock name mutex */ |
282 | 281 |
283 ngx_resolver_free(r, ctx); | 282 /* lock alloc mutex */ |
283 | |
284 if (ctx->event) { | |
285 ngx_resolver_free_locked(r, ctx->event); | |
286 } | |
287 | |
288 ngx_resolver_free_locked(r, ctx); | |
289 | |
290 /* unlock alloc mutex */ | |
284 } | 291 } |
285 | 292 |
286 | 293 |
287 /* NGX_RESOLVE_A only */ | 294 /* NGX_RESOLVE_A only */ |
288 | 295 |
571 ngx_resolver_free(r, rn); | 578 ngx_resolver_free(r, rn); |
572 } | 579 } |
573 | 580 |
574 /* unlock addr mutex */ | 581 /* unlock addr mutex */ |
575 | 582 |
576 /* lock alloc mutex */ | |
577 | |
578 if (ctx->event) { | 583 if (ctx->event) { |
579 ngx_resolver_free_locked(r, ctx->event); | 584 ngx_resolver_free(r, ctx->event); |
580 } | 585 } |
581 | 586 |
582 ngx_resolver_free_locked(r, ctx); | 587 ngx_resolver_free(r, ctx); |
583 | |
584 /* unlock alloc mutex */ | |
585 | 588 |
586 return NGX_ERROR; | 589 return NGX_ERROR; |
587 } | 590 } |
588 | 591 |
589 | 592 |
638 | 641 |
639 ngx_resolver_expire(r, &r->addr_rbtree, &r->addr_expire_queue); | 642 ngx_resolver_expire(r, &r->addr_rbtree, &r->addr_expire_queue); |
640 | 643 |
641 /* unlock addr mutex */ | 644 /* unlock addr mutex */ |
642 | 645 |
643 ngx_resolver_free(r, ctx); | 646 /* lock alloc mutex */ |
647 | |
648 if (ctx->event) { | |
649 ngx_resolver_free_locked(r, ctx->event); | |
650 } | |
651 | |
652 ngx_resolver_free_locked(r, ctx); | |
653 | |
654 /* unlock alloc mutex */ | |
644 } | 655 } |
645 | 656 |
646 | 657 |
647 static void | 658 static void |
648 ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue) | 659 ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue) |