summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-08-08 11:15:38 +0000
committerRoger Dingledine <arma@torproject.org>2004-08-08 11:15:38 +0000
commit7506cce649aea2723a582f2e07c26a58c04b309c (patch)
tree56feed5058b7876edad24a5eba193369bbee9588
parentb2c7b5adfb5f085c298d32b67727f70720b2ac2b (diff)
downloadtor-7506cce649aea2723a582f2e07c26a58c04b309c.tar.gz
tor-7506cce649aea2723a582f2e07c26a58c04b309c.zip
stop wasting cpu time on authdirservers
we were making a new directory only when the old one was dirty, but every time we made one, we'd dirty it by testing it right then. svn:r2199
-rw-r--r--src/or/connection.c3
-rw-r--r--src/or/dirserv.c10
2 files changed, 7 insertions, 6 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index d6291b1825..3ea4fd6bab 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -142,7 +142,8 @@ void connection_free(connection_t *conn) {
tor_free(conn->address);
if(connection_speaks_cells(conn)) {
- directory_set_dirty(); /* XXX should only do this for an open OR conn */
+ if(conn->state == OR_CONN_STATE_OPEN)
+ directory_set_dirty();
if (conn->tls)
tor_tls_free(conn->tls);
}
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 15352ca4da..734cbc5d88 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -267,7 +267,7 @@ dirserv_free_descriptors()
}
/** Parse the server descriptor at *desc and maybe insert it into the
- * list of service descriptors, and (if the descriptor is well-formed)
+ * list of server descriptors, and (if the descriptor is well-formed)
* advance *desc immediately past the descriptor's end.
*
* Return 1 if descriptor is well-formed and accepted;
@@ -356,9 +356,9 @@ dirserv_add_descriptor(const char **desc)
}
if (found >= 0) {
/* if so, decide whether to update it. */
- if (ent->published > ri->published_on) {
- /* We already have a newer descriptor */
- log_fn(LOG_INFO,"We already have a newer desc for nickname %s. Not adding.",ri->nickname);
+ if (ent->published >= ri->published_on) {
+ /* We already have a newer or equal-time descriptor */
+ log_fn(LOG_INFO,"We already have a new enough desc for nickname %s. Not adding.",ri->nickname);
/* This isn't really an error; return success. */
routerinfo_free(ri);
*desc = end;
@@ -662,7 +662,6 @@ size_t dirserv_get_directory(const char **directory)
the_directory_len = strlen(the_directory);
log_fn(LOG_INFO,"New directory (size %d):\n%s",the_directory_len,
the_directory);
- the_directory_is_dirty = 0;
/* Now read the directory we just made in order to update our own
* router lists. This does more signature checking than is strictly
* necessary, but safe is better than sorry. */
@@ -680,6 +679,7 @@ size_t dirserv_get_directory(const char **directory)
log_fn(LOG_WARN, "Couldn't write cached directory to disk. Ignoring.");
}
}
+ the_directory_is_dirty = 0;
} else {
log(LOG_INFO,"Directory still clean, reusing.");
}