Merge commit 'origin/maint-0.2.1'

This commit is contained in:
Nick Mathewson 2009-06-04 03:31:12 -04:00
commit 4945fee65a
4 changed files with 5352 additions and 3791 deletions

View file

@ -26,6 +26,14 @@ Changes in version 0.2.2.1-alpha - 2009-??-??
Changes in version 0.2.1.16-?? - 2009-??-??
o Major performance improvements (on 0.2.0.x):
- Disable and refactor some debugging checks that forced a linear scan
over the whole server-side DNS cache. These accounted for over 50%
of CPU time on a relatively busy exit node's gprof profile. Found by
Jacob.
- Disable some debugging checks that appeared in exit node profile
data.
o Minor bugfixes (on 0.2.0.x):
- Log correct error messages for DNS-related network errors on
Windows.

File diff suppressed because it is too large Load diff

View file

@ -736,15 +736,25 @@ void
assert_connection_edge_not_dns_pending(edge_connection_t *conn)
{
pending_connection_t *pend;
cached_resolve_t **resolve;
cached_resolve_t search;
#if 1
cached_resolve_t *resolve;
strlcpy(search.address, conn->_base.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve)
return;
for (pend = resolve->pending_connections; pend; pend = pend->next) {
tor_assert(pend->conn != conn);
}
#else
cached_resolve_t **resolve;
HT_FOREACH(resolve, cache_map, &cache_root) {
for (pend = (*resolve)->pending_connections;
pend;
pend = pend->next) {
for (pend = (*resolve)->pending_connections; pend; pend = pend->next) {
tor_assert(pend->conn != conn);
}
}
#endif
}
/** Log an error and abort if any connection waiting for a DNS resolve is

View file

@ -451,7 +451,7 @@ conn_read_callback(int fd, short event, void *_conn)
log_debug(LD_NET,"socket %d wants to read.",conn->s);
assert_connection_ok(conn, time(NULL));
/* assert_connection_ok(conn, time(NULL)); */
if (connection_handle_read(conn) < 0) {
if (!conn->marked_for_close) {
@ -483,7 +483,7 @@ conn_write_callback(int fd, short events, void *_conn)
LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.",conn->s));
assert_connection_ok(conn, time(NULL));
/* assert_connection_ok(conn, time(NULL)); */
if (connection_handle_write(conn, 0) < 0) {
if (!conn->marked_for_close) {
@ -529,7 +529,7 @@ conn_close_if_marked(int i)
return 0; /* nothing to see here, move along */
now = time(NULL);
assert_connection_ok(conn, now);
assert_all_pending_dns_resolves_ok();
/* assert_all_pending_dns_resolves_ok(); */
log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s);
if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) {