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)