mirror of
https://github.com/espressif/esp-idf
synced 2025-03-10 09:39:10 -04:00
Merge branch 'bugfix/nvs_mem_leak' into 'master'
nvs: fix memory leak when writing a blob See merge request idf/esp-idf!2969
This commit is contained in:
commit
f9a44968bc
@ -236,10 +236,9 @@ esp_err_t Storage::writeMultiPageBlob(uint8_t nsIndex, const char* key, const vo
|
||||
for (auto it = std::begin(usedPages); it != std::end(usedPages); it++) {
|
||||
it->mPage->eraseItem(nsIndex, ItemType::BLOB_DATA, key, ii++);
|
||||
}
|
||||
usedPages.clearAndFreeNodes();
|
||||
return err;
|
||||
}
|
||||
return ESP_OK;
|
||||
usedPages.clearAndFreeNodes();
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t Storage::writeItem(uint8_t nsIndex, ItemType datatype, const char* key, const void* data, size_t dataSize)
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "esp_partition.h"
|
||||
#include "esp_log.h"
|
||||
#include <string.h>
|
||||
#include "esp_system.h"
|
||||
|
||||
static const char* TAG = "test_nvs";
|
||||
|
||||
@ -213,3 +214,28 @@ TEST_CASE("calculate used and free space", "[nvs]")
|
||||
TEST_ESP_OK(nvs_flash_erase());
|
||||
TEST_ESP_OK(nvs_flash_deinit());
|
||||
}
|
||||
|
||||
TEST_CASE("check for memory leaks in nvs_set_blob", "[nvs]")
|
||||
{
|
||||
esp_err_t err = nvs_flash_init();
|
||||
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||
err = nvs_flash_init();
|
||||
}
|
||||
TEST_ESP_OK( err );
|
||||
|
||||
for (int i = 0; i < 500; ++i) {
|
||||
nvs_handle my_handle;
|
||||
uint8_t key[20] = {0};
|
||||
|
||||
TEST_ESP_OK( nvs_open("test_namespace1", NVS_READWRITE, &my_handle) );
|
||||
TEST_ESP_OK( nvs_set_blob(my_handle, "key", key, sizeof(key)) );
|
||||
TEST_ESP_OK( nvs_commit(my_handle) );
|
||||
nvs_close(my_handle);
|
||||
printf("%d\n", esp_get_free_heap_size());
|
||||
}
|
||||
|
||||
nvs_flash_deinit();
|
||||
printf("%d\n", esp_get_free_heap_size());
|
||||
/* heap leaks will be checked in unity_platform.c */
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user