浏览代码

When we mark a router as down, also mark its local_routerstatus as not running. This way, we do not use directories that are believed to be down.

svn:r5587
Nick Mathewson 19 年之前
父节点
当前提交
7af95e5c06
共有 1 个文件被更改,包括 12 次插入7 次删除
  1. 12 7
      src/or/routerlist.c

+ 12 - 7
src/or/routerlist.c

@@ -1413,6 +1413,7 @@ void
 router_mark_as_down(const char *digest)
 {
   routerinfo_t *router;
+  local_routerstatus_t *status;
   tor_assert(digest);
 
   SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, d,
@@ -1420,13 +1421,17 @@ router_mark_as_down(const char *digest)
                       d->is_running = 0);
 
   router = router_get_by_digest(digest);
-  if (!router) /* we don't seem to know about him in the first place */
-    return;
-  debug(LD_DIR,"Marking router '%s' as down.",router->nickname);
-  if (router_is_me(router) && !we_are_hibernating())
-    warn(LD_NET, "We just marked ourself as down. Are your external "
-         "addresses reachable?");
-  router->is_running = 0;
+  if (router) {
+    debug(LD_DIR,"Marking router '%s' as down.",router->nickname);
+    if (router_is_me(router) && !we_are_hibernating())
+      warn(LD_NET, "We just marked ourself as down. Are your external "
+           "addresses reachable?");
+    router->is_running = 0;
+  }
+  status = router_get_combined_status_by_digest(digest);
+  if (status) {
+    status->status.is_running = 0;
+  }
 }
 
 /** Add <b>router</b> to the routerlist, if we don't already have it.  Replace