summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2007-07-17 11:33:38 +0000
committerRoger Dingledine <arma@torproject.org>2007-07-17 11:33:38 +0000
commita1ab2c80871739d2f550d5912cea372375afa221 (patch)
treec30f3caba596cf891043f48b530ef2b40bc14428 /src
parentb7e4683ff9e7d76ad2230b7b95e1344280443e0d (diff)
downloadtor-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.c13
-rw-r--r--src/or/circuitbuild.c26
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;
+}
+