if the network is down, and we try to connect to a conn because we

have a circuit in mind, and we timeout (30 seconds) because the
network never answers, we were expiring the circuit, but we weren't
obsoleting the connection or telling the helper functions. now do that.


svn:r5668
This commit is contained in:
Roger Dingledine 2005-12-27 09:25:50 +00:00
parent 4088f7dfd1
commit d2171cb7a4

View File

@ -668,12 +668,19 @@ circuit_build_failed(circuit_t *circ)
circ->cpath->state != CPATH_STATE_OPEN) { circ->cpath->state != CPATH_STATE_OPEN) {
/* We failed at the first hop. If there's an OR connection /* We failed at the first hop. If there's an OR connection
to blame, blame it. */ to blame, blame it. */
connection_t *n_conn = NULL;
if (circ->n_conn) { if (circ->n_conn) {
n_conn = circ->n_conn;
} else if (circ->state == CIRCUIT_STATE_OR_WAIT) {
/* we have to hunt for it */
n_conn = connection_or_get_by_identity_digest(circ->n_conn_id_digest);
}
if (n_conn) {
info(LD_OR, "Our circuit failed to get a response from the first hop " info(LD_OR, "Our circuit failed to get a response from the first hop "
"(%s:%d). I'm going to try to rotate to a better connection.", "(%s:%d). I'm going to try to rotate to a better connection.",
circ->n_conn->address, circ->n_conn->port); n_conn->address, n_conn->port);
circ->n_conn->is_obsolete = 1; n_conn->is_obsolete = 1;
helper_node_set_status(circ->n_conn->identity_digest, 0); helper_node_set_status(n_conn->identity_digest, 0);
} }
} }