[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Extract global_origin_circuit_list manipulation code into new fns.
commit ef0559c3e318f16e9617dd8176c86230efe67777
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Mon Jan 2 13:06:47 2017 -0500
Extract global_origin_circuit_list manipulation code into new fns.
Closes ticket 20921.
---
changes/ticket20921 | 4 ++++
src/or/circuitlist.c | 61 +++++++++++++++++++++++++++++++---------------------
2 files changed, 41 insertions(+), 24 deletions(-)
diff --git a/changes/ticket20921 b/changes/ticket20921
new file mode 100644
index 0000000..7bc0074
--- /dev/null
+++ b/changes/ticket20921
@@ -0,0 +1,4 @@
+ o Code simplification and refactoring:
+ - Refactor code to manipulate global_origin_circuit_list into separate
+ functions. Closes ticket 20921.
+
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 5943e51..2def522 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -509,6 +509,39 @@ circuit_count_pending_on_channel(channel_t *chan)
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
* 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. */
if (CIRCUIT_IS_ORIGIN(circ)) {
- origin_circuit_t *origin_circ = 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_remove_from_origin_circuit_list(TO_ORIGIN_CIRCUIT(circ));
}
circuit_about_to_free(circ);
@@ -811,11 +836,8 @@ origin_circuit_new(void)
init_circuit_base(TO_CIRCUIT(circ));
/* Add to origin-list. */
- if (!global_origin_circuit_list)
- global_origin_circuit_list = smartlist_new();
- smartlist_add(global_origin_circuit_list, circ);
- circ->global_origin_circuit_list_idx =
- smartlist_len(global_origin_circuit_list) - 1;
+ circ->global_origin_circuit_list_idx = -1;
+ circuit_add_to_origin_circuit_list(circ);
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);
tor_assert(circ->magic == ORIGIN_CIRCUIT_MAGIC);
- if (ocirc->global_origin_circuit_list_idx != -1) {
- 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;
- }
- }
+ circuit_remove_from_origin_circuit_list(ocirc);
if (ocirc->build_state) {
extend_info_free(ocirc->build_state->chosen_exit);
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits