From: Nick Mathewson Date: Wed, 28 Sep 2011 18:14:31 +0000 (-0400) Subject: Make sure the microdesc cache is loaded before setting a v3 md consensus X-Git-Tag: tor-0.2.3.5-alpha~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6201b8b361fb56d9d488cea4ed47d5e0819d94b8;p=thirdparty%2Ftor.git 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. --- diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 39bc082450..b93b919c13 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -177,7 +177,10 @@ nodelist_set_consensus(networkstatus_t *ns) { const or_options_t *options = get_options(); int authdir = authdir_mode_v2(options) || authdir_mode_v3(options); + init_nodelist(); + if (ns->flavor == FLAV_MICRODESC) + (void) get_microdesc_cache(); /* Make sure it exists first. */ SMARTLIST_FOREACH(the_nodelist->nodes, node_t *, node, node->rs = NULL);