aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2011-05-03 17:28:28 -0400
committerNick Mathewson <nickm@torproject.org>2011-05-03 17:28:28 -0400
commit68ae5afa5a172fbc485eda7e6bfd4750fa6a69f5 (patch)
treec97962c1ad80afc0febff088fbdf020e331738c3 /src
parentcb6c909664f97f751fe78c0aa3205a9042760c53 (diff)
downloadtor-68ae5afa5a172fbc485eda7e6bfd4750fa6a69f5.tar
tor-68ae5afa5a172fbc485eda7e6bfd4750fa6a69f5.tar.gz
Change who calls microdesc_cache_rebuild().
Previously we ensured that it would get called periodically by doing it from inside the code that added microdescriptors. That won't work though: it would interfere with our code that tried to read microdescs from disk initially. Instead, we should consider rebuilding the cache periodically, and on startup.
Diffstat (limited to 'src')
-rw-r--r--src/or/main.c2
-rw-r--r--src/or/microdesc.c11
2 files changed, 10 insertions, 3 deletions
diff --git a/src/or/main.c b/src/or/main.c
index a26be39fd..462b51e78 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1075,6 +1075,8 @@ run_scheduled_events(time_t now)
rep_history_clean(now - options->RephistTrackTime);
rend_cache_clean();
rend_cache_clean_v2_descs_as_dir();
+ if (authdir_mode_v3(options))
+ microdesc_cache_rebuild(NULL, 0);
#define CLEAN_CACHES_INTERVAL (30*60)
time_to_clean_caches = now + CLEAN_CACHES_INTERVAL;
}
diff --git a/src/or/microdesc.c b/src/or/microdesc.c
index c6bb3c61f..73d228500 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -208,8 +208,6 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
if (f)
finish_writing_to_file(open_file); /*XXX Check me.*/
- microdesc_cache_rebuild(cache, 0/* only as needed */);
-
return added;
}
@@ -230,6 +228,7 @@ microdesc_cache_clear(microdesc_cache_t *cache)
}
cache->total_len_seen = 0;
cache->n_seen = 0;
+ cache->bytes_dropped = 0;
}
/** Reload the contents of <b>cache</b> from disk. If it is empty, load it
@@ -271,7 +270,7 @@ microdesc_cache_reload(microdesc_cache_t *cache)
log_notice(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
total);
- microdesc_cache_clean(cache, 0, 0);
+ microdesc_cache_rebuild(cache, 0 /* don't force */);
return 0;
}
@@ -354,6 +353,12 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
off_t off = 0;
int orig_size, new_size;
+ if (cache == NULL) {
+ cache = the_microdesc_cache;
+ if (cache == NULL)
+ return 0;
+ }
+
/* Remove dead descriptors */
microdesc_cache_clean(cache, 0/*cutoff*/, 0/*force*/);