summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-10-30 16:16:12 -0400
committerNick Mathewson <nickm@torproject.org>2019-10-30 16:16:12 -0400
commita6ad26fd5fdfcad209d8263b4ea2a83b4a44c296 (patch)
tree3aae39cf00f8f6b3ab614f4fe96e65bef709bf40
parent5a1dfca071720ea512796d50ebb0b83630906cb4 (diff)
parentcfc60e566cf4100400a8a411faccc9744c07cc8b (diff)
downloadtor-a6ad26fd5fdfcad209d8263b4ea2a83b4a44c296.tar.gz
tor-a6ad26fd5fdfcad209d8263b4ea2a83b4a44c296.zip
Merge remote-tracking branch 'tor-github/pr/1485'
-rw-r--r--src/core/or/circuit_st.h5
-rw-r--r--src/core/or/circuitlist.c6
-rw-r--r--src/core/or/circuitlist.h6
3 files changed, 17 insertions, 0 deletions
diff --git a/src/core/or/circuit_st.h b/src/core/or/circuit_st.h
index 0c281f7257..929f3840ef 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 9ee9f93c99..9a0b9241da 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 80c1f7ac4e..afbf1ad98f 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))