]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Must detach before attaching, or else we infinite-loop
authorNick Mathewson <nickm@torproject.org>
Thu, 15 Apr 2004 03:48:26 +0000 (03:48 +0000)
committerNick Mathewson <nickm@torproject.org>
Thu, 15 Apr 2004 03:48:26 +0000 (03:48 +0000)
svn:r1632

src/or/connection_edge.c

index 010bd4356ac55e9d538f2dbcd69abb43c5e5ab1d..975b7158ac7a18dc1fcc9a65952fd76e357a0985 100644 (file)
@@ -232,6 +232,7 @@ int connection_edge_process_relay_cell_not_open(
       addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
       client_dns_set_entry(conn->socks_request->address, addr);
       conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
+      circuit_detach_stream(circ,conn);
       if(connection_ap_handshake_attach_circuit(conn) >= 0)
         return 0;
       /* else, conn will get closed below */
@@ -240,6 +241,7 @@ int connection_edge_process_relay_cell_not_open(
           < MAX_RESOLVE_FAILURES) {
         /* We haven't retried too many times; reattach the connection. */
         conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
+        circuit_detach_stream(circ,conn);
         if(connection_ap_handshake_attach_circuit(conn) >= 0)
           return 0;
         /* else, conn will get closed below */
@@ -256,7 +258,6 @@ int connection_edge_process_relay_cell_not_open(
     return 0;
   }
 
-
   if(conn->type == CONN_TYPE_AP && rh->command == RELAY_COMMAND_CONNECTED) {
     if(conn->state != AP_CONN_STATE_CONNECT_WAIT) {
       log_fn(LOG_WARN,"Got 'connected' while not in state connect_wait. Dropping.");