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):
}
/** 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)
{
* 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();
* 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;
* 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())
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);
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.
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,
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,