mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 15:10:48 +01:00
Extract global_origin_circuit_list manipulation code into new fns.
Closes ticket 20921.
This commit is contained in:
parent
97ed2ce085
commit
ef0559c3e3
2 changed files with 41 additions and 24 deletions
4
changes/ticket20921
Normal file
4
changes/ticket20921
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
o Code simplification and refactoring:
|
||||||
|
- Refactor code to manipulate global_origin_circuit_list into separate
|
||||||
|
functions. Closes ticket 20921.
|
||||||
|
|
|
@ -509,6 +509,39 @@ circuit_count_pending_on_channel(channel_t *chan)
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Remove <b>origin_circ</b> from the global list of origin circuits.
|
||||||
|
* Called when we are freeing a circuit.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
circuit_remove_from_origin_circuit_list(origin_circuit_t *origin_circ)
|
||||||
|
{
|
||||||
|
int origin_idx = origin_circ->global_origin_circuit_list_idx;
|
||||||
|
if (origin_idx < 0)
|
||||||
|
return;
|
||||||
|
origin_circuit_t *c2;
|
||||||
|
tor_assert(origin_idx <= smartlist_len(global_origin_circuit_list));
|
||||||
|
c2 = smartlist_get(global_origin_circuit_list, origin_idx);
|
||||||
|
tor_assert(origin_circ == c2);
|
||||||
|
smartlist_del(global_origin_circuit_list, origin_idx);
|
||||||
|
if (origin_idx < smartlist_len(global_origin_circuit_list)) {
|
||||||
|
origin_circuit_t *replacement =
|
||||||
|
smartlist_get(global_origin_circuit_list, origin_idx);
|
||||||
|
replacement->global_origin_circuit_list_idx = origin_idx;
|
||||||
|
}
|
||||||
|
origin_circ->global_origin_circuit_list_idx = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Add <b>origin_circ</b> to the global list of origin circuits. Called
|
||||||
|
* when creating the circuit. */
|
||||||
|
static void
|
||||||
|
circuit_add_to_origin_circuit_list(origin_circuit_t *origin_circ)
|
||||||
|
{
|
||||||
|
tor_assert(origin_circ->global_origin_circuit_list_idx == -1);
|
||||||
|
smartlist_t *lst = circuit_get_global_origin_circuit_list();
|
||||||
|
smartlist_add(lst, origin_circ);
|
||||||
|
origin_circ->global_origin_circuit_list_idx = smartlist_len(lst) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
/** Detach from the global circuit list, and deallocate, all
|
/** Detach from the global circuit list, and deallocate, all
|
||||||
* circuits that have been marked for close.
|
* circuits that have been marked for close.
|
||||||
*/
|
*/
|
||||||
|
@ -533,15 +566,7 @@ circuit_close_all_marked(void)
|
||||||
|
|
||||||
/* Remove it from the origin circuit list, if appropriate. */
|
/* Remove it from the origin circuit list, if appropriate. */
|
||||||
if (CIRCUIT_IS_ORIGIN(circ)) {
|
if (CIRCUIT_IS_ORIGIN(circ)) {
|
||||||
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
|
circuit_remove_from_origin_circuit_list(TO_ORIGIN_CIRCUIT(circ));
|
||||||
int origin_idx = origin_circ->global_origin_circuit_list_idx;
|
|
||||||
smartlist_del(global_origin_circuit_list, origin_idx);
|
|
||||||
if (origin_idx < smartlist_len(global_origin_circuit_list)) {
|
|
||||||
origin_circuit_t *replacement =
|
|
||||||
smartlist_get(global_origin_circuit_list, origin_idx);
|
|
||||||
replacement->global_origin_circuit_list_idx = origin_idx;
|
|
||||||
}
|
|
||||||
origin_circ->global_origin_circuit_list_idx = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
circuit_about_to_free(circ);
|
circuit_about_to_free(circ);
|
||||||
|
@ -811,11 +836,8 @@ origin_circuit_new(void)
|
||||||
init_circuit_base(TO_CIRCUIT(circ));
|
init_circuit_base(TO_CIRCUIT(circ));
|
||||||
|
|
||||||
/* Add to origin-list. */
|
/* Add to origin-list. */
|
||||||
if (!global_origin_circuit_list)
|
circ->global_origin_circuit_list_idx = -1;
|
||||||
global_origin_circuit_list = smartlist_new();
|
circuit_add_to_origin_circuit_list(circ);
|
||||||
smartlist_add(global_origin_circuit_list, circ);
|
|
||||||
circ->global_origin_circuit_list_idx =
|
|
||||||
smartlist_len(global_origin_circuit_list) - 1;
|
|
||||||
|
|
||||||
circuit_build_times_update_last_circ(get_circuit_build_times_mutable());
|
circuit_build_times_update_last_circ(get_circuit_build_times_mutable());
|
||||||
|
|
||||||
|
@ -875,16 +897,7 @@ circuit_free(circuit_t *circ)
|
||||||
memlen = sizeof(origin_circuit_t);
|
memlen = sizeof(origin_circuit_t);
|
||||||
tor_assert(circ->magic == ORIGIN_CIRCUIT_MAGIC);
|
tor_assert(circ->magic == ORIGIN_CIRCUIT_MAGIC);
|
||||||
|
|
||||||
if (ocirc->global_origin_circuit_list_idx != -1) {
|
circuit_remove_from_origin_circuit_list(ocirc);
|
||||||
int idx = ocirc->global_origin_circuit_list_idx;
|
|
||||||
origin_circuit_t *c2 = smartlist_get(global_origin_circuit_list, idx);
|
|
||||||
tor_assert(c2 == ocirc);
|
|
||||||
smartlist_del(global_origin_circuit_list, idx);
|
|
||||||
if (idx < smartlist_len(global_origin_circuit_list)) {
|
|
||||||
c2 = smartlist_get(global_origin_circuit_list, idx);
|
|
||||||
c2->global_origin_circuit_list_idx = idx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ocirc->build_state) {
|
if (ocirc->build_state) {
|
||||||
extend_info_free(ocirc->build_state->chosen_exit);
|
extend_info_free(ocirc->build_state->chosen_exit);
|
||||||
|
|
Loading…
Add table
Reference in a new issue