summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--src/or/main.c4
-rw-r--r--src/or/router.c15
3 files changed, 15 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index d8f6f7d9d5..170659efd7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
Changes in version 0.2.0.9-alpha - 2007-10-??
+ o Major bugfixes:
+ - Stop publishing a new server descriptor just because we HUP or
+ when we find our DirPort to be reachable but won't actually publish
+ it. Extra descriptors without any real changes are dropped by the
+ authorities, and can screw up our "publish every 18 hours" schedule.
+
Changes in version 0.2.0.8-alpha - 2007-10-12
o Major features (router descriptor cache):
diff --git a/src/or/main.c b/src/or/main.c
index 4554113ee2..8c12c70992 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1250,7 +1250,7 @@ dns_servers_relaunch_checks(void)
}
/** Called when we get a SIGHUP: reload configuration files and keys,
- * retry all connections, re-upload all descriptors, and so on. */
+ * retry all connections, and so on. */
static int
do_hup(void)
{
@@ -1299,8 +1299,6 @@ do_hup(void)
* force a retry there. */
if (server_mode(options)) {
-// const char *descriptor;
- mark_my_descriptor_dirty();
/* Restart cpuworker and dnsworker processes, so they get up-to-date
* configuration options. */
cpuworkers_rotate();
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,