Browse Source

free bridge list on exit; try harder to free buffer freelists on exit.

svn:r10854
Roger Dingledine 17 years ago
parent
commit
a1ab2c8087
2 changed files with 23 additions and 16 deletions
  1. 8 5
      src/or/buffers.c
  2. 15 11
      src/or/circuitbuild.c

+ 8 - 5
src/or/buffers.c

@@ -262,16 +262,19 @@ buf_shrink_freelists(int free_all)
   int j;
   for (j = 0; j < 2; ++j) {
     free_mem_list_t *list = j ? &free_mem_list_16k : &free_mem_list_4k;
-    if (list->lowwater > list->slack) {
+    if (list->lowwater > list->slack || free_all) {
       int i, n_to_skip, n_to_free;
       char **ptr;
-      log_info(LD_GENERAL, "We haven't used %d/%d allocated %d-byte buffer "
+      if (free_all) { /* Free every one of them */
+        log_info(LD_GENERAL, "Freeing all %d elements from %d-byte freelist.",
+                 list->len, (int)list->chunksize);
+        n_to_free = list->len;
+      } else { /* Skip over the slack and non-lowwater entries */
+        log_info(LD_GENERAL, "We haven't used %d/%d allocated %d-byte buffer "
                "memory chunks since the last call; freeing all but %d of them",
                list->lowwater, list->len, (int)list->chunksize, list->slack);
-      if (free_all) /* Free every one of them */
-        n_to_free = list->len;
-      else /* Skip over the slack and non-lowwater entries */
         n_to_free = list->lowwater - list->slack;
+      }
       n_to_skip = list->len - n_to_free;
       for (ptr = &list->list, i = 0; i < n_to_skip; ++i) {
         char *mem = *ptr;

+ 15 - 11
src/or/circuitbuild.c

@@ -2083,17 +2083,6 @@ pick_entry_guards(void)
     entry_guards_changed();
 }
 
-/** Release all storage held by the list of entry guards. */
-void
-entry_guards_free_all(void)
-{
-  if (entry_guards) {
-    SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, tor_free(e));
-    smartlist_free(entry_guards);
-    entry_guards = NULL;
-  }
-}
-
 /** How long (in seconds) do we allow an entry guard to be nonfunctional,
  * unlisted, excluded, or otherwise nonusable before we give up on it? */
 #define ENTRY_GUARD_REMOVE_AFTER (30*24*60*60)
@@ -2823,3 +2812,18 @@ any_bridge_descriptors_known(void)
 #endif
 }
 
+/** Release all storage held by the list of entry guards and related
+ * memory structs. */
+void
+entry_guards_free_all(void)
+{
+  if (entry_guards) {
+    SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, tor_free(e));
+    smartlist_free(entry_guards);
+    entry_guards = NULL;
+  }
+  clear_bridge_list();
+  smartlist_free(bridge_list);
+  bridge_list = NULL;
+}
+