소스 검색

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

Roger Dingledine 20 년 전
부모
커밋
d2171cb7a4
1개의 변경된 파일10개의 추가작업 그리고 3개의 파일을 삭제
  1. 10 3
      src/or/circuituse.c

+ 10 - 3
src/or/circuituse.c

@@ -668,12 +668,19 @@ circuit_build_failed(circuit_t *circ)
       circ->cpath->state != CPATH_STATE_OPEN) {
     /* We failed at the first hop. If there's an OR connection
        to blame, blame it. */
+    connection_t *n_conn = NULL;
     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 "
            "(%s:%d). I'm going to try to rotate to a better connection.",
-           circ->n_conn->address, circ->n_conn->port);
-      circ->n_conn->is_obsolete = 1;
-      helper_node_set_status(circ->n_conn->identity_digest, 0);
+           n_conn->address, n_conn->port);
+      n_conn->is_obsolete = 1;
+      helper_node_set_status(n_conn->identity_digest, 0);
     }
   }