소스 검색

don't detach-and-retry rendezvous streams

svn:r1498
Roger Dingledine 22 년 전
부모
커밋
077f133257
1개의 변경된 파일9개의 추가작업 그리고 0개의 파일을 삭제
  1. 9 0
      src/or/connection_edge.c

+ 9 - 0
src/or/connection_edge.c

@@ -595,6 +595,15 @@ void connection_ap_expire_beginning(void) {
       continue;
       continue;
     conn->num_retries++;
     conn->num_retries++;
     circ = circuit_get_by_conn(conn);
     circ = circuit_get_by_conn(conn);
+    if(circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED) {
+      if (now - conn->timestamp_lastread > 45) {
+        log_fn(LOG_WARN,"Rend stream is %d seconds late. Giving up.",
+               (int)(now - conn->timestamp_lastread));
+        connection_mark_for_close(conn,END_STREAM_REASON_TIMEOUT);
+      }
+      continue;
+    }
+    assert(circ->purpose == CIRCUIT_PURPOSE_C_GENERAL);
     if(conn->num_retries >= MAX_STREAM_RETRIES) {
     if(conn->num_retries >= MAX_STREAM_RETRIES) {
       log_fn(LOG_WARN,"Stream is %d seconds late. Giving up.",
       log_fn(LOG_WARN,"Stream is %d seconds late. Giving up.",
              15*conn->num_retries);
              15*conn->num_retries);