Make sure the microdesc cache is loaded before setting a v3 md consensus

Otherwise, we can wind up munging our reference counts if we set it in
the middle of loading the nodes.  This happens because
nodelist_set_consensus() and microdesc_reload_cache() are both in the
business of adjusting microdescriptors' references.
This commit is contained in:
Nick Mathewson 2011-09-28 14:14:31 -04:00
parent 4a10845075
commit 6201b8b361

View File

@ -177,7 +177,10 @@ nodelist_set_consensus(networkstatus_t *ns)
{ {
const or_options_t *options = get_options(); const or_options_t *options = get_options();
int authdir = authdir_mode_v2(options) || authdir_mode_v3(options); int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
init_nodelist(); init_nodelist();
if (ns->flavor == FLAV_MICRODESC)
(void) get_microdesc_cache(); /* Make sure it exists first. */
SMARTLIST_FOREACH(the_nodelist->nodes, node_t *, node, SMARTLIST_FOREACH(the_nodelist->nodes, node_t *, node,
node->rs = NULL); node->rs = NULL);