From 99bfb1bebe20c1502c782f94c0366aa4f337131d Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Mon, 2 Jul 2007 22:15:26 +0000 Subject: [PATCH] If there's a never-before-connected-to guard node in our list, never choose any guards past it. This way we don't expand our guard list unless we need to. [Bugfix in 0.1.2.x] I'm not sure if this will solve all our problems, but it is at least something. svn:r10730 --- ChangeLog | 5 +++++ src/or/circuitbuild.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index 59025bd780..b269a200db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -50,6 +50,11 @@ Changes in version 0.2.0.3-alpha - 2007-??-?? - Stop under-counting the number of authorities that recommend each version. [Bugfix on 0.1.2.x] + o Minor bugfixes (guard nodes): + - If there's a never-before-connected-to guard node in our list, + never choose any guards past it. This way we don't expand our + guard list unless we need to. [Bugfix in 0.1.2.x] + Changes in version 0.2.0.2-alpha - 2007-06-02 o Major bugfixes on 0.2.0.1-alpha: diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index b8085e8fd7..c0c5965a34 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -2418,6 +2418,13 @@ choose_random_entry(cpath_build_state_t *state) r = entry_is_live(entry, need_uptime, need_capacity, 0); if (r && !smartlist_isin(exit_family, r)) { smartlist_add(live_entry_guards, r); + if (!entry->made_contact) { + /* Always start with the first not-yet-contacted entry + * guard. Otherwise we might add several new ones, pick + * the second new one, and now we've expanded our entry + * guard list without needing to. */ + goto choose_and_finish; + } if (smartlist_len(live_entry_guards) >= options->NumEntryGuards) break; /* we have enough */ } @@ -2451,6 +2458,7 @@ choose_random_entry(cpath_build_state_t *state) /* live_entry_guards may be empty below. Oh well, we tried. */ } + choose_and_finish: r = smartlist_choose(live_entry_guards); smartlist_free(live_entry_guards); smartlist_free(exit_family);