diff options
Diffstat (limited to 'src/or/circuitbuild.c')
-rw-r--r-- | src/or/circuitbuild.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index bddb22e4d0..f33074783e 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -2251,7 +2251,7 @@ entry_nodes_should_be_added(void) /** Add all nodes in EntryNodes that aren't currently guard nodes to the list * of guard nodes, at the front. */ -void +static void entry_guards_prepend_from_config(void) { or_options_t *options = get_options(); @@ -2259,9 +2259,17 @@ entry_guards_prepend_from_config(void) smartlist_t *old_entry_guards_on_list = smartlist_create(); smartlist_t *old_entry_guards_not_on_list = smartlist_create(); smartlist_t *entry_fps = smartlist_create(); - tor_assert(entry_guards); - tor_assert(options->EntryNodes); + + should_add_entry_nodes = 0; + + if (!options->EntryNodes) { + /* It's possible that a controller set EntryNodes, thus making + * should_add_entry_nodes set, then cleared it again, all before the + * call to choose_random_entry() that triggered us. If so, just return. + */ + return; + } log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", options->EntryNodes); @@ -2300,7 +2308,6 @@ entry_guards_prepend_from_config(void) smartlist_add_all(entry_guards, old_entry_guards_not_on_list); } - should_add_entry_nodes = 0; smartlist_free(entry_routers); smartlist_free(entry_fps); smartlist_free(old_entry_guards_on_list); |