nvs_flash: delete Storage if init fails
Previously, nvs_flash_init_custom would not be called if Storage for a particular partition was already created. This caused issues if the first call to nvs_flash_init failed due to Storage init error. This issue exhibited itself as random failures of NVS CI test. With this change, storage object is deleted (and not added to storage list) if initialization fails.
This commit is contained in:
parent
f32b25ebe2
commit
fe30789149
1 changed files with 14 additions and 7 deletions
|
@ -88,15 +88,22 @@ extern "C" void nvs_dump(const char *partName)
|
||||||
extern "C" esp_err_t nvs_flash_init_custom(const char *partName, uint32_t baseSector, uint32_t sectorCount)
|
extern "C" esp_err_t nvs_flash_init_custom(const char *partName, uint32_t baseSector, uint32_t sectorCount)
|
||||||
{
|
{
|
||||||
ESP_LOGD(TAG, "nvs_flash_init_custom partition=%s start=%d count=%d", partName, baseSector, sectorCount);
|
ESP_LOGD(TAG, "nvs_flash_init_custom partition=%s start=%d count=%d", partName, baseSector, sectorCount);
|
||||||
nvs::Storage* mStorage;
|
nvs::Storage* new_storage = NULL;
|
||||||
|
nvs::Storage* storage = lookup_storage_from_name(partName);
|
||||||
mStorage = lookup_storage_from_name(partName);
|
if (storage == NULL) {
|
||||||
if (mStorage == NULL) {
|
new_storage = new nvs::Storage((const char *)partName);
|
||||||
mStorage = new nvs::Storage((const char *)partName);
|
storage = new_storage;
|
||||||
s_nvs_storage_list.push_back(mStorage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mStorage->init(baseSector, sectorCount);
|
esp_err_t err = storage->init(baseSector, sectorCount);
|
||||||
|
if (new_storage != NULL) {
|
||||||
|
if (err == ESP_OK) {
|
||||||
|
s_nvs_storage_list.push_back(new_storage);
|
||||||
|
} else {
|
||||||
|
delete new_storage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
|
|
Loading…
Reference in a new issue