mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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
This commit is contained in:
parent
93f085c4a2
commit
0dcc8c7048
11
src/or/dns.c
11
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user