--- /dev/null
+ o Minor features (security, OOM):
+ - When closing an edge connection because we've run out of memory,
+ also count the amount of memory that any tunnelled directory
+ connection attached to that connection had consumed. Part of
+ ticket 11792.
\ No newline at end of file
cell_queue_clear(& TO_OR_CIRCUIT(circ)->p_chan_cells);
}
+static size_t
+marked_circuit_single_conn_free_bytes(connection_t *conn)
+{
+ size_t result = 0;
+ if (conn->inbuf) {
+ result += buf_allocation(conn->inbuf);
+ buf_clear(conn->inbuf);
+ }
+ if (conn->outbuf) {
+ result += buf_allocation(conn->outbuf);
+ buf_clear(conn->outbuf);
+ }
+ return result;
+}
+
/** Aggressively free buffer contents on all the buffers of all streams in the
* list starting at <b>stream</b>. Return the number of bytes recovered. */
static size_t
size_t result = 0;
for ( ; stream; stream = stream->next_stream) {
connection_t *conn = TO_CONN(stream);
- if (conn->inbuf) {
- result += buf_allocation(conn->inbuf);
- buf_clear(conn->inbuf);
- }
- if (conn->outbuf) {
- result += buf_allocation(conn->outbuf);
- buf_clear(conn->outbuf);
+ result += marked_circuit_single_conn_free_bytes(conn);
+ if (conn->linked_conn) {
+ result += marked_circuit_single_conn_free_bytes(conn->linked_conn);
}
}
return result;