diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index f542804d20..0acc465714 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1431,9 +1431,9 @@ choose_good_middle_server(uint8_t purpose, } /** Pick a good entry server for the circuit to be built according to - * state. Don't reuse a chosen exit (if any), don't use this router - * (if we're an OR), and respect firewall settings; if we're using helper nodes, - * return one. + * state. Don't reuse a chosen exit (if any), don't use this + * router (if we're an OR), and respect firewall settings; if we're + * using helper nodes, return one. * * If state is NULL, we're choosing entries to serve as helper nodes, * not for any particular circuit. @@ -1468,6 +1468,8 @@ choose_good_entry_server(cpath_build_state_t *state) smartlist_add(excluded, r); } } + // XXX we should exclude busy exit nodes here, too, + // but only if there are enough other nodes available. choice = router_choose_random_node(options->EntryNodes, options->ExcludeNodes, excluded, state ? state->need_uptime : 1, state ? state->need_capacity : 0, diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index f376d3df80..e41580ffd8 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -1005,8 +1005,9 @@ connection_ap_handshake_process_socks(connection_t *conn) } } else { struct in_addr in; - routerinfo_t *r = router_get_by_nickname(conn->chosen_exit_name, 1); + routerinfo_t *r; conn->chosen_exit_name = tor_strdup(socks->address); + r = router_get_by_nickname(conn->chosen_exit_name, 1); *socks->address = 0; if (r) { /* XXXX Should this use server->address instead? */