]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix an xxx021: do not remove routerinfos as too old and unlisted unless we have a...
authorNick Mathewson <nickm@torproject.org>
Sun, 4 Jan 2009 19:47:12 +0000 (19:47 +0000)
committerNick Mathewson <nickm@torproject.org>
Sun, 4 Jan 2009 19:47:12 +0000 (19:47 +0000)
svn:r17886

ChangeLog
src/or/routerlist.c

index 87d410d44f36800b75640d72e754c20f4aeca42a..9ba226cb7373eefe5b060f2188f2c6a5d41950a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -29,6 +29,8 @@ Changes in version 0.2.1.10-alpha - 2009-01-??
     - If we are retrying something slowly over and over, do not
       automatically give up after the 254th failure.  Bugfix on
       0.2.1.9-alpha.
+    - Do not remove routers as too old if we do not have any consensus
+      document.  Bugfix on 0.2.0.7-alpha.
 
   o Deprecated and removed features:
     - The old "tor --version --version" command, which would spit out the
index 305c1debc750080114dd5269f3246adb03571d43..f145d42232911a1a3e96a96027df9f8f181ccd9c 100644 (file)
@@ -3232,6 +3232,7 @@ routerlist_remove_old_routers(void)
   int caches = directory_caches_dir_info(get_options());
   const networkstatus_t *consensus = networkstatus_get_latest_consensus();
   const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
+  int have_enough_v2;
 
   trusted_dirs_remove_old_certs();
 
@@ -3286,14 +3287,17 @@ routerlist_remove_old_routers(void)
           digestset_add(retain, rs->descriptor_digest));
   }
 
-  /* If we have nearly as many networkstatuses as we want, we should consider
-   * pruning current routers that are too old and that nobody recommends.  (If
-   * we don't have enough networkstatuses, then we should get more before we
-   * decide to kill routers.) */
-  /* XXX021 we don't check if we have a v3 consensus, do we? should we? -RD */
-  if (!caches ||
-      (networkstatus_v2_list &&
-       smartlist_len(networkstatus_v2_list) > get_n_v2_authorities() / 2)) {
+  /* If we have a consensus, and nearly as many v2 networkstatuses as we want,
+   * we should consider pruning current routers that are too old and that
+   * nobody recommends.  (If we don't have a consensus or enough v2
+   * networkstatuses, then we should get more before we decide to kill
+   * routers.) */
+  /* we set this to true iff we don't care about v2 info, or we have enough. */
+  have_enough_v2 = !caches ||
+    (networkstatus_v2_list &&
+     smartlist_len(networkstatus_v2_list) > get_n_v2_authorities() / 2);
+
+  if (have_enough_v2 && consensus) {
     cutoff = now - ROUTER_MAX_AGE;
     /* Remove too-old unrecommended members of routerlist->routers. */
     for (i = 0; i < smartlist_len(routerlist->routers); ++i) {