]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bugfix: When a dns request failed, we would detach any "resolving" streams from the...
authorNick Mathewson <nickm@torproject.org>
Tue, 21 Sep 2004 16:42:07 +0000 (16:42 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 21 Sep 2004 16:42:07 +0000 (16:42 +0000)
svn:r2355

src/or/dns.c

index a3244ad0b36e3a7940332e7974b5e7e48c87153f..19dd0e1520a124b4e486dbc68e8fc068a5cdd678 100644 (file)
@@ -494,11 +494,16 @@ static void dns_found_answer(char *address, uint32_t addr, char outcome) {
     if(resolve->state == CACHE_STATE_FAILED) {
       /* prevent double-remove. */
       pendconn->state = EXIT_CONN_STATE_RESOLVEFAILED;
-      circuit_detach_stream(circuit_get_by_conn(pendconn), pendconn);
-      if (pendconn->purpose == EXIT_PURPOSE_CONNECT)
+      if (pendconn->purpose == EXIT_PURPOSE_CONNECT) {
+        /*XXXX can we safely raise the detach here to happen after we
+         * send the end cell? */
+        circuit_detach_stream(circuit_get_by_conn(pendconn), pendconn);
         connection_edge_end(pendconn, END_STREAM_REASON_MISC, pendconn->cpath_layer);
-      else
+      } else {
         send_resolved_cell(pendconn, RESOLVED_TYPE_ERROR);
+        /* This detach must happen after we send the resolved cell. */
+        circuit_detach_stream(circuit_get_by_conn(pendconn), pendconn);
+      }
       connection_free(pendconn);
     } else {
       if (pendconn->purpose == EXIT_PURPOSE_CONNECT) {