diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-02-28 00:23:05 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-02-28 00:23:05 +0000 |
commit | 1a3e1c5510aa0b167dd0c882317c6d0dc67f0e1b (patch) | |
tree | 1f942ae0efdba58b2483c8ab46cced872d7e14d8 /src/or/circuitbuild.c | |
parent | 16f1008d01d7269bd00dfc509f9af0a3a5ed087f (diff) | |
download | tor-1a3e1c5510aa0b167dd0c882317c6d0dc67f0e1b.tar.gz tor-1a3e1c5510aa0b167dd0c882317c6d0dc67f0e1b.zip |
r11970@catbus: nickm | 2007-02-27 19:17:27 -0500
Fix a bug found by Udo van den Heuvel: avoid an assertion failure when a controller sets and clears EntryNodes before the next call to choose_random_entry(). Also make a function static.
svn:r9669
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); |