diff options
Diffstat (limited to 'src/or/router.c')
-rw-r--r-- | src/or/router.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/or/router.c b/src/or/router.c index 105b1c11a3..b0fea7e8ff 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -597,7 +597,7 @@ check_whether_dirport_reachable(void) * a DirPort. */ static int -decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router) +decide_to_advertise_dirport(or_options_t *options, uint16_t dir_port) { static int advertising=1; /* start out assuming we will advertise */ int new_choice=1; @@ -607,10 +607,10 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router) * worth mentioning to the user, either because they're obvious * or because they're normal behavior. */ - if (!router->dir_port) /* short circuit the rest of the function */ + if (!dir_port) /* short circuit the rest of the function */ return 0; if (authdir_mode(options)) /* always publish */ - return router->dir_port; + return dir_port; if (we_are_hibernating()) return 0; if (!check_whether_dirport_reachable()) @@ -635,7 +635,7 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router) if (advertising != new_choice) { if (new_choice == 1) { - log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", router->dir_port); + log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", dir_port); } else { tor_assert(reason); log(LOG_NOTICE, LD_DIR, "Not advertising DirPort (Reason: %s)", reason); @@ -643,7 +643,7 @@ decide_to_advertise_dirport(or_options_t *options, routerinfo_t *router) advertising = new_choice; } - return advertising ? router->dir_port : 0; + return advertising ? dir_port : 0; } /** Some time has passed, or we just got new directory information. @@ -722,7 +722,8 @@ router_dirport_found_reachable(void) log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable " "from the outside. Excellent."); can_reach_dir_port = 1; - mark_my_descriptor_dirty(); + if (!me || decide_to_advertise_dirport(get_options(), me->dir_port)) + mark_my_descriptor_dirty(); if (!me) return; control_event_server_status(LOG_NOTICE, @@ -1553,7 +1554,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router, router->nickname, router->address, router->or_port, - decide_to_advertise_dirport(options, router), + decide_to_advertise_dirport(options, router->dir_port), router->platform, published, fingerprint, |