From: Nick Mathewson Date: Tue, 21 Sep 2004 16:42:07 +0000 (+0000) Subject: Bugfix: When a dns request failed, we would detach any "resolving" streams from the... X-Git-Tag: tor-0.0.9pre1~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dcc8c70488c5da706bf9a739c4e4b118c8c0ad1;p=thirdparty%2Ftor.git Bugfix: When a dns request failed, we would detach any "resolving" streams from the circuit before we would send a the resolve_failed cells. svn:r2355 --- diff --git a/src/or/dns.c b/src/or/dns.c index a3244ad0b3..19dd0e1520 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -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) {