mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
fix remaining compilation problems
This commit is contained in:
parent
664b2645fb
commit
82d4b60b91
@ -450,10 +450,16 @@ circuit_count_pending_on_channel(channel_t *chan)
|
|||||||
void
|
void
|
||||||
circuit_close_all_marked(void)
|
circuit_close_all_marked(void)
|
||||||
{
|
{
|
||||||
circuit_t *circ, *tmp;
|
smartlist_t *lst = circuit_get_global_list();
|
||||||
TOR_LIST_FOREACH_SAFE(circ, &global_circuitlist, head, tmp)
|
SMARTLIST_FOREACH_BEGIN(lst, circuit_t *, circ) {
|
||||||
if (circ->marked_for_close)
|
/* Fix up index if SMARTLIST_DEL_CURRENT just moved this one. */
|
||||||
|
circ->global_circuitlist_idx = circ_sl_idx;
|
||||||
|
if (circ->marked_for_close) {
|
||||||
|
circ->global_circuitlist_idx = -1;
|
||||||
circuit_free(circ);
|
circuit_free(circ);
|
||||||
|
SMARTLIST_DEL_CURRENT(lst, circ);
|
||||||
|
}
|
||||||
|
} SMARTLIST_FOREACH_END(circ);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Return the head of the global linked list of circuits. */
|
/** Return the head of the global linked list of circuits. */
|
||||||
@ -679,7 +685,8 @@ init_circuit_base(circuit_t *circ)
|
|||||||
circ->deliver_window = CIRCWINDOW_START;
|
circ->deliver_window = CIRCWINDOW_START;
|
||||||
cell_queue_init(&circ->n_chan_cells);
|
cell_queue_init(&circ->n_chan_cells);
|
||||||
|
|
||||||
TOR_LIST_INSERT_HEAD(&global_circuitlist, circ, head);
|
smartlist_add(circuit_get_global_list(), circ);
|
||||||
|
circ->global_circuitlist_idx = smartlist_len(circuit_get_global_list()) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
|
/** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
|
||||||
@ -800,7 +807,16 @@ circuit_free(circuit_t *circ)
|
|||||||
extend_info_free(circ->n_hop);
|
extend_info_free(circ->n_hop);
|
||||||
tor_free(circ->n_chan_create_cell);
|
tor_free(circ->n_chan_create_cell);
|
||||||
|
|
||||||
TOR_LIST_REMOVE(circ, head);
|
if (circ->global_circuitlist_idx != -1) {
|
||||||
|
int idx = circ->global_circuitlist_idx;
|
||||||
|
circuit_t *c2 = smartlist_get(global_circuitlist, idx);
|
||||||
|
tor_assert(c2 == circ);
|
||||||
|
smartlist_del(global_circuitlist, idx);
|
||||||
|
if (idx < smartlist_len(global_circuitlist)) {
|
||||||
|
c2 = smartlist_get(global_circuitlist, idx);
|
||||||
|
c2->global_circuitlist_idx = idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove from map. */
|
/* Remove from map. */
|
||||||
circuit_set_n_circid_chan(circ, 0, NULL);
|
circuit_set_n_circid_chan(circ, 0, NULL);
|
||||||
@ -842,9 +858,9 @@ circuit_clear_cpath(origin_circuit_t *circ)
|
|||||||
void
|
void
|
||||||
circuit_free_all(void)
|
circuit_free_all(void)
|
||||||
{
|
{
|
||||||
circuit_t *tmp, *tmp2;
|
smartlist_t *lst = circuit_get_global_list();
|
||||||
|
|
||||||
TOR_LIST_FOREACH_SAFE(tmp, &global_circuitlist, head, tmp2) {
|
SMARTLIST_FOREACH_BEGIN(lst, circuit_t *, tmp) {
|
||||||
if (! CIRCUIT_IS_ORIGIN(tmp)) {
|
if (! CIRCUIT_IS_ORIGIN(tmp)) {
|
||||||
or_circuit_t *or_circ = TO_OR_CIRCUIT(tmp);
|
or_circuit_t *or_circ = TO_OR_CIRCUIT(tmp);
|
||||||
while (or_circ->resolving_streams) {
|
while (or_circ->resolving_streams) {
|
||||||
@ -854,8 +870,13 @@ circuit_free_all(void)
|
|||||||
or_circ->resolving_streams = next_conn;
|
or_circ->resolving_streams = next_conn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tmp->global_circuitlist_idx = -1;
|
||||||
circuit_free(tmp);
|
circuit_free(tmp);
|
||||||
}
|
SMARTLIST_DEL_CURRENT(lst, tmp);
|
||||||
|
} SMARTLIST_FOREACH_END(tmp);
|
||||||
|
|
||||||
|
smartlist_free(lst);
|
||||||
|
global_circuitlist = NULL;
|
||||||
|
|
||||||
smartlist_free(circuits_pending_chans);
|
smartlist_free(circuits_pending_chans);
|
||||||
circuits_pending_chans = NULL;
|
circuits_pending_chans = NULL;
|
||||||
@ -1262,14 +1283,17 @@ origin_circuit_t *
|
|||||||
circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
|
circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
|
||||||
const char *digest, uint8_t purpose)
|
const char *digest, uint8_t purpose)
|
||||||
{
|
{
|
||||||
circuit_t *circ;
|
int idx;
|
||||||
|
smartlist_t *lst = circuit_get_global_list();
|
||||||
tor_assert(CIRCUIT_PURPOSE_IS_ORIGIN(purpose));
|
tor_assert(CIRCUIT_PURPOSE_IS_ORIGIN(purpose));
|
||||||
if (start == NULL)
|
if (start == NULL)
|
||||||
circ = TOR_LIST_FIRST(&global_circuitlist);
|
idx = 0;
|
||||||
else
|
else
|
||||||
circ = TOR_LIST_NEXT(TO_CIRCUIT(start), head);
|
idx = TO_CIRCUIT(start)->global_circuitlist_idx + 1;
|
||||||
|
|
||||||
|
for ( ; idx < smartlist_len(lst); ++idx) {
|
||||||
|
circuit_t *circ = smartlist_get(lst, idx);
|
||||||
|
|
||||||
for ( ; circ; circ = TOR_LIST_NEXT(circ, head)) {
|
|
||||||
if (circ->marked_for_close)
|
if (circ->marked_for_close)
|
||||||
continue;
|
continue;
|
||||||
if (circ->purpose != purpose)
|
if (circ->purpose != purpose)
|
||||||
|
@ -30,27 +30,24 @@
|
|||||||
* global circuits.
|
* global circuits.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct global_circuitlist_s mock_global_circuitlist =
|
static smartlist_t * mock_global_circuitlist = NULL;
|
||||||
TOR_LIST_HEAD_INITIALIZER(global_circuitlist);
|
|
||||||
|
|
||||||
NS_DECL(struct global_circuitlist_s *, circuit_get_global_list, (void));
|
NS_DECL(smartlist_t *, circuit_get_global_list, (void));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
NS(test_main)(void *arg)
|
NS(test_main)(void *arg)
|
||||||
{
|
{
|
||||||
/* Choose origin_circuit_t wlog. */
|
/* Choose origin_circuit_t wlog. */
|
||||||
origin_circuit_t *mock_circuit1, *mock_circuit2;
|
origin_circuit_t *mock_circuit1, *mock_circuit2;
|
||||||
circuit_t *circ, *tmp;
|
|
||||||
int expected_circuits = 2, actual_circuits;
|
int expected_circuits = 2, actual_circuits;
|
||||||
|
|
||||||
(void)arg;
|
(void)arg;
|
||||||
|
|
||||||
mock_circuit1 = tor_malloc_zero(sizeof(origin_circuit_t));
|
mock_circuit1 = tor_malloc_zero(sizeof(origin_circuit_t));
|
||||||
mock_circuit2 = tor_malloc_zero(sizeof(origin_circuit_t));
|
mock_circuit2 = tor_malloc_zero(sizeof(origin_circuit_t));
|
||||||
TOR_LIST_INSERT_HEAD(
|
mock_global_circuitlist = smartlist_new();
|
||||||
&mock_global_circuitlist, TO_CIRCUIT(mock_circuit1), head);
|
smartlist_add(mock_global_circuitlist, TO_CIRCUIT(mock_circuit1));
|
||||||
TOR_LIST_INSERT_HEAD(
|
smartlist_add(mock_global_circuitlist, TO_CIRCUIT(mock_circuit2));
|
||||||
&mock_global_circuitlist, TO_CIRCUIT(mock_circuit2), head);
|
|
||||||
|
|
||||||
NS_MOCK(circuit_get_global_list);
|
NS_MOCK(circuit_get_global_list);
|
||||||
|
|
||||||
@ -58,17 +55,18 @@ NS(test_main)(void *arg)
|
|||||||
|
|
||||||
tt_assert(expected_circuits == actual_circuits);
|
tt_assert(expected_circuits == actual_circuits);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
TOR_LIST_FOREACH_SAFE(
|
tor_free(mock_circuit1);
|
||||||
circ, NS(circuit_get_global_list)(), head, tmp);
|
tor_free(mock_circuit2);
|
||||||
tor_free(circ);
|
smartlist_free(mock_global_circuitlist);
|
||||||
NS_UNMOCK(circuit_get_global_list);
|
mock_global_circuitlist = NULL;
|
||||||
|
NS_UNMOCK(circuit_get_global_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct global_circuitlist_s *
|
static smartlist_t *
|
||||||
NS(circuit_get_global_list)(void)
|
NS(circuit_get_global_list)(void)
|
||||||
{
|
{
|
||||||
return &mock_global_circuitlist;
|
return mock_global_circuitlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef NS_SUBMODULE
|
#undef NS_SUBMODULE
|
||||||
|
Loading…
Reference in New Issue
Block a user