diff options
author | Roger Dingledine <arma@torproject.org> | 2007-07-17 11:33:38 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2007-07-17 11:33:38 +0000 |
commit | a1ab2c80871739d2f550d5912cea372375afa221 (patch) | |
tree | c30f3caba596cf891043f48b530ef2b40bc14428 /src | |
parent | b7e4683ff9e7d76ad2230b7b95e1344280443e0d (diff) | |
download | tor-a1ab2c80871739d2f550d5912cea372375afa221.tar.gz tor-a1ab2c80871739d2f550d5912cea372375afa221.zip |
free bridge list on exit; try harder to free buffer freelists on exit.
svn:r10854
Diffstat (limited to 'src')
-rw-r--r-- | src/or/buffers.c | 13 | ||||
-rw-r--r-- | src/or/circuitbuild.c | 26 |
2 files changed, 23 insertions, 16 deletions
diff --git a/src/or/buffers.c b/src/or/buffers.c index cfb3613d18..99271de7f9 100644 --- a/src/or/buffers.c +++ b/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; diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index c0c5965a34..4d9a9c23ac 100644 --- a/src/or/circuitbuild.c +++ b/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; +} + |