circ: Add function to learn if queue is full

Related to #40731

Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
David Goulet
2022-12-14 10:19:14 -05:00
parent f0f32c1734
commit cfdc9f9d29
2 changed files with 26 additions and 0 deletions
+24
View File
@@ -2831,3 +2831,27 @@ assert_circuit_ok,(const circuit_t *c))
tor_assert(!or_circ || !or_circ->rend_splice);
}
}
/** Return true iff the circuit queue for the given direction is full that is
* above the high watermark. */
bool
circuit_is_queue_full(const circuit_t *circ, cell_direction_t direction)
{
int queue_size;
tor_assert(circ);
/* Gather objects we need based on cell direction. */
if (direction == CELL_DIRECTION_OUT) {
/* Outbound. */
queue_size = circ->n_chan_cells.n;
} else {
/* Inbound. */
queue_size = CONST_TO_OR_CIRCUIT(circ)->p_chan_cells.n;
}
/* Then check if our cell queue has reached its high watermark as in its
* upper limit. This is so we avoid too much memory pressure by queuing a
* large amount of cells. */
return queue_size >= cell_queue_highwatermark();
}
+2
View File
@@ -247,6 +247,8 @@ MOCK_DECL(void, channel_note_destroy_not_pending,
smartlist_t *circuit_find_circuits_to_upgrade_from_guard_wait(void);
bool circuit_is_queue_full(const circuit_t *circ, cell_direction_t direction);
/* Declare the handle helpers */
HANDLE_DECL(circuit, circuit_t, )
#define circuit_handle_free(h) \