[tor-commits] [tor/master] Wait for busy authorities/fallbacks rather than ignoring excluded nodes

nickm at torproject.org nickm at torproject.org
Wed Dec 16 13:41:44 UTC 2015


commit 978210d5a868e8b0f5bd5f83804117ae46954f5f
Author: teor (Tim Wilson-Brown) <teor2345 at gmail.com>
Date:   Mon Dec 14 20:20:52 2015 +1100

    Wait for busy authorities/fallbacks rather than ignoring excluded nodes
    
    Applies the 6c443e987d fix to router_pick_directory_server_impl.
    
    6c443e987d applied to directory servers chosen from the consensus,
    and was:
    "Tweak the 9969 fix a little
    
    If we have busy nodes and excluded nodes, then don't retry with the
    excluded ones enabled. Instead, wait for the busy ones to be nonbusy."
---
 changes/feature17864 |    5 +++++
 src/or/routerlist.c  |   10 ++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/changes/feature17864 b/changes/feature17864
new file mode 100644
index 0000000..1cf1562
--- /dev/null
+++ b/changes/feature17864
@@ -0,0 +1,5 @@
+  o Minor feature (directory downloads):
+    - Wait for busy authorities and fallbacks to become non-busy when
+      bootstrapping. (A similar change was made in 6c443e987d for
+      directory servers chosen from the consensus.)
+      Closes ticket 17864; patch by "teor".
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 051bac5..c45854c 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1739,22 +1739,24 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
       result = &selection->fake_status;
   }
 
-  if (n_busy_out)
-    *n_busy_out = n_busy;
-
   smartlist_free(direct);
   smartlist_free(tunnel);
   smartlist_free(overloaded_direct);
   smartlist_free(overloaded_tunnel);
 
-  if (result == NULL && try_excluding && !options->StrictNodes && n_excluded) {
+  if (result == NULL && try_excluding && !options->StrictNodes && n_excluded
+      && !n_busy) {
     /* If we got no result, and we are excluding nodes, and StrictNodes is
      * not set, try again without excluding nodes. */
     try_excluding = 0;
     n_excluded = 0;
+    n_busy = 0;
     goto retry_without_exclude;
   }
 
+  if (n_busy_out)
+    *n_busy_out = n_busy;
+
   return result;
 }
 





More information about the tor-commits mailing list