summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/memarea.c16
-rw-r--r--src/common/memarea.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/src/common/memarea.c b/src/common/memarea.c
index 916010cfd1..743a451a8b 100644
--- a/src/common/memarea.c
+++ b/src/common/memarea.c
@@ -197,6 +197,22 @@ memarea_strndup(memarea_t *area, const char *s, size_t n)
return result;
}
+/** Set <b>allocated_out</b> to the number of bytes allocated in <b>area</b>,
+ * and <b>used_out</b> to the number of bytes currently used. */
+void
+memarea_get_stats(memarea_t *area, size_t *allocated_out, size_t *used_out)
+{
+ size_t a = 0, u = 0;
+ memarea_chunk_t *chunk;
+ for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
+ a += CHUNK_HEADER_SIZE + chunk->mem_size;
+ tor_assert(chunk->next_mem >= chunk->u.mem);
+ u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->u.mem);
+ }
+ *allocated_out = a;
+ *used_out = u;
+}
+
/** Assert that <b>area</b> is okay. */
void
memarea_assert_ok(memarea_t *area)
diff --git a/src/common/memarea.h b/src/common/memarea.h
index 76a3c3af81..17ab781a7f 100644
--- a/src/common/memarea.h
+++ b/src/common/memarea.h
@@ -17,6 +17,8 @@ void *memarea_alloc_zero(memarea_t *area, size_t sz);
void *memarea_memdup(memarea_t *area, const void *s, size_t n);
char *memarea_strdup(memarea_t *area, const char *s);
char *memarea_strndup(memarea_t *area, const char *s, size_t n);
+void memarea_get_stats(memarea_t *area,
+ size_t *allocated_out, size_t *used_out);
void memarea_assert_ok(memarea_t *area);
#endif