diff options
author | Nick Mathewson <nickm@torproject.org> | 2019-10-30 16:16:12 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2019-10-30 16:16:12 -0400 |
commit | a6ad26fd5fdfcad209d8263b4ea2a83b4a44c296 (patch) | |
tree | 3aae39cf00f8f6b3ab614f4fe96e65bef709bf40 | |
parent | 5a1dfca071720ea512796d50ebb0b83630906cb4 (diff) | |
parent | cfc60e566cf4100400a8a411faccc9744c07cc8b (diff) | |
download | tor-a6ad26fd5fdfcad209d8263b4ea2a83b4a44c296.tar.gz tor-a6ad26fd5fdfcad209d8263b4ea2a83b4a44c296.zip |
Merge remote-tracking branch 'tor-github/pr/1485'
-rw-r--r-- | src/core/or/circuit_st.h | 5 | ||||
-rw-r--r-- | src/core/or/circuitlist.c | 6 | ||||
-rw-r--r-- | src/core/or/circuitlist.h | 6 |
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)) |