Loading changes/bug40515 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfixes (controller, path bias): - When a circuit's path is specified, in full or in part, from the controller API, do not count that circuit towards our path-bias calculations. (Doing so was incorrect, since we cannot tell whether the controller is selecting relays randomly.) Resolves a "Bug" warning. Fixes bug 40515; bugfix on 0.2.4.10-alpha. src/core/or/origin_circuit_st.h +6 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,12 @@ struct origin_circuit_t { */ unsigned first_hop_from_controller : 1; /** * If true, this circuit's path has been chosen, in full or in part, * by the controller API, and it's okay to ignore checks that we'd * usually do on the path as whole. */ unsigned int any_hop_from_controller : 1; /** * Tristate variable to guard against pathbias miscounting * due to circuit purpose transitions changing the decision Loading src/feature/client/circpathbias.c +11 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,17 @@ pathbias_should_count(origin_circuit_t *circ) return 0; } /* Ignore circuits where the controller helped choose the path. When * this happens, we can't be sure whether the path was chosen randomly * or not. */ if (circ->any_hop_from_controller) { /* (In this case, we _don't_ check to see if shouldcount is changing, * since it's possible that an already-created circuit later gets extended * by the controller. */ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED; return 0; } /* Completely ignore one hop circuits */ if (circ->build_state->onehop_tunnel || circ->build_state->desired_path_len == 1) { Loading src/feature/control/control_cmd.c +2 −0 Original line number Diff line number Diff line Loading @@ -822,6 +822,8 @@ handle_control_extendcircuit(control_connection_t *conn, circ->first_hop_from_controller = 1; } circ->any_hop_from_controller = 1; /* now circ refers to something that is ready to be extended */ first_node = zero_circ; SMARTLIST_FOREACH(nodes, const node_t *, node, Loading Loading
changes/bug40515 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfixes (controller, path bias): - When a circuit's path is specified, in full or in part, from the controller API, do not count that circuit towards our path-bias calculations. (Doing so was incorrect, since we cannot tell whether the controller is selecting relays randomly.) Resolves a "Bug" warning. Fixes bug 40515; bugfix on 0.2.4.10-alpha.
src/core/or/origin_circuit_st.h +6 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,12 @@ struct origin_circuit_t { */ unsigned first_hop_from_controller : 1; /** * If true, this circuit's path has been chosen, in full or in part, * by the controller API, and it's okay to ignore checks that we'd * usually do on the path as whole. */ unsigned int any_hop_from_controller : 1; /** * Tristate variable to guard against pathbias miscounting * due to circuit purpose transitions changing the decision Loading
src/feature/client/circpathbias.c +11 −0 Original line number Diff line number Diff line Loading @@ -363,6 +363,17 @@ pathbias_should_count(origin_circuit_t *circ) return 0; } /* Ignore circuits where the controller helped choose the path. When * this happens, we can't be sure whether the path was chosen randomly * or not. */ if (circ->any_hop_from_controller) { /* (In this case, we _don't_ check to see if shouldcount is changing, * since it's possible that an already-created circuit later gets extended * by the controller. */ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED; return 0; } /* Completely ignore one hop circuits */ if (circ->build_state->onehop_tunnel || circ->build_state->desired_path_len == 1) { Loading
src/feature/control/control_cmd.c +2 −0 Original line number Diff line number Diff line Loading @@ -822,6 +822,8 @@ handle_control_extendcircuit(control_connection_t *conn, circ->first_hop_from_controller = 1; } circ->any_hop_from_controller = 1; /* now circ refers to something that is ready to be extended */ first_node = zero_circ; SMARTLIST_FOREACH(nodes, const node_t *, node, Loading