conn from circ->resolving_streams
otherwise it gets freed and stays there, causing seg faults.
svn:r1915
}
/** Return a circ such that circ is attached to <b>conn</b>, either as
- * p_conn, n-conn, or in p_streams or n_streams.
+ * p_conn, n-conn, or in p_streams or n_streams or resolving_streams.
*
* Return NULL if no such circuit exists.
*/
}
break;
case CONN_TYPE_EXIT:
- if (conn->state == EXIT_CONN_STATE_RESOLVING)
+ if (conn->state == EXIT_CONN_STATE_RESOLVING) {
+ circuit_detach_stream(circuit_get_by_conn(conn), conn);
connection_dns_remove(conn);
+ }
break;
case CONN_TYPE_DNSWORKER:
if (conn->state == DNSWORKER_STATE_BUSY) {
connection_mark_for_close macro */
/* prevent double-remove. */
pendconn->state = EXIT_CONN_STATE_RESOLVEFAILED;
+ circuit_detach_stream(circuit_get_by_conn(pendconn), pendconn);
connection_edge_end(pendconn, END_STREAM_REASON_MISC, pendconn->cpath_layer);
connection_mark_for_close(pendconn);
connection_free(pendconn);