Browse Source

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

Roger Dingledine 17 years ago
parent
commit
99bfb1bebe
2 changed files with 13 additions and 0 deletions
  1. 5 0
      ChangeLog
  2. 8 0
      src/or/circuitbuild.c

+ 5 - 0
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:

+ 8 - 0
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);