Browse Source

r9718@catbus: nickm | 2007-01-22 14:13:00 -0500
Free CACHE_STATE_DONE cached_router_t items on dns_free_all().


svn:r9386

Nick Mathewson 17 years ago
parent
commit
36620ca056
2 changed files with 17 additions and 0 deletions
  1. 2 0
      ChangeLog
  2. 15 0
      src/or/dns.c

+ 2 - 0
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

+ 15 - 0
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);