Merge remote-tracking branch 'public/bug14129_024' into maint-0.2.4

This commit is contained in:
Nick Mathewson 2015-02-24 13:23:44 -05:00
commit 2bcb596dcf
2 changed files with 12 additions and 1 deletions

7
changes/bug14129 Normal file
View File

@ -0,0 +1,7 @@
o Major bugfixes (exit node stability):
- Fix an assertion failure that could occur under high DNS load. Fixes
bug 14129; bugfix on Tor 0.0.7rc1. Found by "jowr"; diagnosed and fixed
by "cypherpunks".

View File

@ -557,6 +557,8 @@ purge_expired_resolves(time_t now)
/* Connections should only be pending if they have no socket. */
tor_assert(!SOCKET_OK(pend->conn->base_.s));
pendconn = pend->conn;
/* Prevent double-remove */
pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
if (!pendconn->base_.marked_for_close) {
connection_edge_end(pendconn, END_STREAM_REASON_TIMEOUT);
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
@ -1132,7 +1134,9 @@ connection_dns_remove(edge_connection_t *conn)
return; /* more are pending */
}
}
tor_assert(0); /* not reachable unless onlyconn not in pending list */
log_warn(LD_BUG, "Connection (fd "TOR_SOCKET_T_FORMAT") was not waiting "
"for a resolve of %s, but we tried to remove it.",
conn->base_.s, escaped_safe_str(conn->base_.address));
}
}