summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2007-10-13 22:31:35 +0000
committerRoger Dingledine <arma@torproject.org>2007-10-13 22:31:35 +0000
commit39902e93f75bbdf850eb898c847583ed46747865 (patch)
tree3bfaeae98efe3b2319bd7af787ae919ac5c0a8e1
parentd9ba4d3e8ba7c192c29c14952fdb16acd8b16622 (diff)
downloadtor-39902e93f75bbdf850eb898c847583ed46747865.tar.gz
tor-39902e93f75bbdf850eb898c847583ed46747865.zip
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. svn:r11915
-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,