[tor-commits] [tor/master] circ: Add an handle to circuit_t

nickm at torproject.org nickm at torproject.org
Wed Oct 30 20:16:19 UTC 2019


commit cfc60e566cf4100400a8a411faccc9744c07cc8b
Author: David Goulet <dgoulet at torproject.org>
Date:   Wed Oct 30 11:44:50 2019 -0400

    circ: Add an handle to circuit_t
    
    Closes #32343
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 src/core/or/circuit_st.h  | 5 +++++
 src/core/or/circuitlist.c | 6 ++++++
 src/core/or/circuitlist.h | 6 ++++++
 3 files changed, 17 insertions(+)

diff --git a/src/core/or/circuit_st.h b/src/core/or/circuit_st.h
index 0c281f725..929f3840e 100644
--- a/src/core/or/circuit_st.h
+++ b/src/core/or/circuit_st.h
@@ -14,6 +14,8 @@
 
 #include "core/or/or.h"
 
+#include "lib/container/handles.h"
+
 #include "core/or/cell_queue_st.h"
 
 struct hs_token_t;
@@ -59,6 +61,9 @@ struct circuit_t {
   uint32_t magic; /**< For memory and type debugging: must equal
                    * ORIGIN_CIRCUIT_MAGIC or OR_CIRCUIT_MAGIC. */
 
+  /** Handle entry for handle-based lookup */
+  HANDLE_ENTRY(circuit, circuit_t);
+
   /** The channel that is next in this circuit. */
   channel_t *n_chan;
 
diff --git a/src/core/or/circuitlist.c b/src/core/or/circuitlist.c
index 9ee9f93c9..9a0b9241d 100644
--- a/src/core/or/circuitlist.c
+++ b/src/core/or/circuitlist.c
@@ -147,6 +147,9 @@ static int any_opened_circs_cached_val = 0;
 
 /********* END VARIABLES ************/
 
+/* Implement circuit handle helpers. */
+HANDLE_IMPL(circuit, circuit_t,)
+
 or_circuit_t *
 TO_OR_CIRCUIT(circuit_t *x)
 {
@@ -1247,6 +1250,9 @@ circuit_free_(circuit_t *circ)
   /* Free any circuit padding structures */
   circpad_circuit_free_all_machineinfos(circ);
 
+  /* Clear all dangling handle references. */
+  circuit_handles_clear(circ);
+
   if (should_free) {
     memwipe(mem, 0xAA, memlen); /* poison memory */
     tor_free(mem);
diff --git a/src/core/or/circuitlist.h b/src/core/or/circuitlist.h
index 80c1f7ac4..afbf1ad98 100644
--- a/src/core/or/circuitlist.h
+++ b/src/core/or/circuitlist.h
@@ -12,6 +12,7 @@
 #ifndef TOR_CIRCUITLIST_H
 #define TOR_CIRCUITLIST_H
 
+#include "lib/container/handles.h"
 #include "lib/testsupport/testsupport.h"
 #include "feature/hs/hs_ident.h"
 #include "core/or/ocirc_event.h"
@@ -242,6 +243,11 @@ MOCK_DECL(void, channel_note_destroy_not_pending,
 
 smartlist_t *circuit_find_circuits_to_upgrade_from_guard_wait(void);
 
+/* Declare the handle helpers */
+HANDLE_DECL(circuit, circuit_t, )
+#define circuit_handle_free(h)    \
+    FREE_AND_NULL(circuit_handle_t, circuit_handle_free_, (h))
+
 #ifdef CIRCUITLIST_PRIVATE
 STATIC void circuit_free_(circuit_t *circ);
 #define circuit_free(circ) FREE_AND_NULL(circuit_t, circuit_free_, (circ))





More information about the tor-commits mailing list