diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-02-21 14:40:18 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-02-21 14:40:18 +1100 |
| commit | 47ae601d417d0ef99eb6fe433ef695614d8d2786 (patch) | |
| tree | f536ecc214c012c0d69b3a8d350a7a1cadb2f671 /src/memory/arena.cpp | |
| parent | 941bafca17b13547a88668b787ce4c8e064ef7ff (diff) | |
| download | tangara-fw-47ae601d417d0ef99eb6fe433ef695614d8d2786.tar.gz | |
Tidy up pipeline and use arena capacity to test for overruns
Diffstat (limited to 'src/memory/arena.cpp')
| -rw-r--r-- | src/memory/arena.cpp | 7 |
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) { |
