From 36620ca0567561ddda6f867440119e705409b3fa Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 22 Jan 2007 19:13:02 +0000 Subject: [PATCH] r9718@catbus: nickm | 2007-01-22 14:13:00 -0500 Free CACHE_STATE_DONE cached_router_t items on dns_free_all(). svn:r9386 --- ChangeLog | 2 ++ src/or/dns.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7695b9742..d50401529 100644 --- a/ChangeLog +++ b/ChangeLog @@ -51,6 +51,8 @@ Changes in version 0.1.2.7-alpha - 2007-??-?? bytes.) - Fix as-yet-unused reverse IPv6 lookup code so it sends nybbles in the correct order. + - Free memory held in recently-completed DNS lookup attempts on exit. + This was not a memory leak, but may have been hiding memory leaks. Changes in version 0.1.2.6-alpha - 2007-01-09 diff --git a/src/or/dns.c b/src/or/dns.c index ea1df1ac4..537d5ff80 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -318,6 +318,21 @@ void dns_free_all(void) { cached_resolve_t **ptr, **next, *item; + if (cached_resolve_pqueue) { + SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res, + { + /* XXXX012 The hach lookups here could be quite slow; remove them + * once we're happy. */ + if (res->state == CACHE_STATE_DONE) { + cached_resolve_t *removed = HT_REMOVE(cache_map, &cache_root, res); + tor_assert(!removed); + _free_cached_resolve(res); + } else { + cached_resolve_t *found = HT_FIND(cache_map, &cache_root, res); + tor_assert(found); + } + }); + } for (ptr = HT_START(cache_map, &cache_root); ptr != NULL; ptr = next) { item = *ptr; next = HT_NEXT_RMV(cache_map, &cache_root, ptr);