summaryrefslogtreecommitdiff
path: root/src/or/circuitbuild.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-02-28 00:23:05 +0000
committerNick Mathewson <nickm@torproject.org>2007-02-28 00:23:05 +0000
commit1a3e1c5510aa0b167dd0c882317c6d0dc67f0e1b (patch)
tree1f942ae0efdba58b2483c8ab46cced872d7e14d8 /src/or/circuitbuild.c
parent16f1008d01d7269bd00dfc509f9af0a3a5ed087f (diff)
downloadtor-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.c15
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);