diff --git a/libuavcan/src/uc_dynamic_memory.cpp b/libuavcan/src/uc_dynamic_memory.cpp index 4c5ddf5885..85e2a03163 100644 --- a/libuavcan/src/uc_dynamic_memory.cpp +++ b/libuavcan/src/uc_dynamic_memory.cpp @@ -45,7 +45,7 @@ std::size_t LimitedPoolAllocator::getBlockSize() const std::size_t LimitedPoolAllocator::getNumBlocks() const { - return allocator_.getNumBlocks(); + return std::min(max_blocks_, allocator_.getNumBlocks()); } } diff --git a/libuavcan/test/dynamic_memory.cpp b/libuavcan/test/dynamic_memory.cpp index e16d4f2a31..b179211518 100644 --- a/libuavcan/test/dynamic_memory.cpp +++ b/libuavcan/test/dynamic_memory.cpp @@ -100,6 +100,8 @@ TEST(DynamicMemory, LimitedPoolAllocator) uavcan::PoolAllocator<128, 32> pool32; uavcan::LimitedPoolAllocator lim(pool32, 2); + EXPECT_EQ(2, lim.getNumBlocks()); + const void* ptr1 = lim.allocate(1); const void* ptr2 = lim.allocate(1); const void* ptr3 = lim.allocate(1);