summaryrefslogtreecommitdiff
path: root/src/memory
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-02-21 14:40:18 +1100
committerjacqueline <me@jacqueline.id.au>2023-02-21 14:40:18 +1100
commit47ae601d417d0ef99eb6fe433ef695614d8d2786 (patch)
treef536ecc214c012c0d69b3a8d350a7a1cadb2f671 /src/memory
parent941bafca17b13547a88668b787ce4c8e064ef7ff (diff)
downloadtangara-fw-47ae601d417d0ef99eb6fe433ef695614d8d2786.tar.gz
Tidy up pipeline and use arena capacity to test for overruns
Diffstat (limited to 'src/memory')
-rw-r--r--src/memory/arena.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/memory/arena.cpp b/src/memory/arena.cpp
index 450ac4f2..1e82e064 100644
--- a/src/memory/arena.cpp
+++ b/src/memory/arena.cpp
@@ -23,7 +23,8 @@ Arena::Arena(std::size_t block_size,
}
Arena::~Arena() {
- // TODO: assert queue is full?
+ // We shouldn't have any blocks in use when destroying an arena.
+ assert(uxQueueSpacesAvailable(free_blocks_) == 0);
vQueueDelete(free_blocks_);
free(pool_);
}
@@ -44,6 +45,10 @@ auto Arena::Return(ArenaPtr ptr) -> void {
xQueueSend(free_blocks_, &ptr.start, 0);
}
+auto Arena::BlocksFree() -> std::size_t {
+ return uxQueueMessagesWaiting(free_blocks_);
+}
+
auto ArenaRef::Acquire(Arena* a) -> std::optional<ArenaRef> {
auto ptr = a->Acquire();
if (ptr) {