From 6b5e467f9682e8b1f2d49dadb92beb324179a250 Mon Sep 17 00:00:00 2001 From: Lingkai Dong Date: Fri, 26 Mar 2021 17:58:36 +0000 Subject: [PATCH] HeapBlockDevice::erase(): free up heap memory `HeapBlockDevice::erase()` previously performed a range and alignment check only. This commit adds freeing of heap memory. --- .../blockdevice/include/blockdevice/HeapBlockDevice.h | 6 ++++-- storage/blockdevice/source/HeapBlockDevice.cpp | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/storage/blockdevice/include/blockdevice/HeapBlockDevice.h b/storage/blockdevice/include/blockdevice/HeapBlockDevice.h index 965896c427..f853dc72cd 100644 --- a/storage/blockdevice/include/blockdevice/HeapBlockDevice.h +++ b/storage/blockdevice/include/blockdevice/HeapBlockDevice.h @@ -28,9 +28,11 @@ namespace mbed { -/** Lazily allocated heap-backed block device +/** Lazily allocated heap-backed block device. * - * Useful for simulating a block device and tests + * Useful for simulating a block device and tests. + * + * @note Each block is allocated when used, and freed when erased. * * @code * #include "mbed.h" diff --git a/storage/blockdevice/source/HeapBlockDevice.cpp b/storage/blockdevice/source/HeapBlockDevice.cpp index 5994d6194b..996501b141 100644 --- a/storage/blockdevice/source/HeapBlockDevice.cpp +++ b/storage/blockdevice/source/HeapBlockDevice.cpp @@ -44,7 +44,7 @@ HeapBlockDevice::~HeapBlockDevice() } delete[] _blocks; - _blocks = 0; + _blocks = nullptr; } } @@ -63,7 +63,7 @@ int HeapBlockDevice::init() } for (size_t i = 0; i < _count; i++) { - _blocks[i] = 0; + _blocks[i] = nullptr; } } @@ -184,6 +184,13 @@ int HeapBlockDevice::erase(bd_addr_t addr, bd_size_t size) if (!is_valid_erase(addr, size)) { return BD_ERROR_DEVICE_ERROR; } + + for (size_t i = 0; i < (size / _erase_size); i++) { + size_t index = addr / _erase_size + i; + delete[] _blocks[index]; + _blocks[index] = nullptr; + } + return 0; }