commit ec59167cae1f5b3057ed722857d78ec78239e991 Author: Nick Mathewson nickm@torproject.org Date: Mon Aug 18 15:21:50 2014 -0400
When counting memory from closing a connection, count the dir conn too
Fix part of bug 11972 --- changes/bug11792 | 5 +++++ src/or/circuitlist.c | 25 ++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/changes/bug11792 b/changes/bug11792 new file mode 100644 index 0000000..1d38189 --- /dev/null +++ b/changes/bug11792 @@ -0,0 +1,5 @@ + 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 diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index f3a8350..9aeb3eb 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -1799,6 +1799,21 @@ marked_circuit_free_cells(circuit_t *circ) 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 @@ -1807,13 +1822,9 @@ marked_circuit_streams_free_bytes(edge_connection_t *stream) 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;
tor-commits@lists.torproject.org