]> granicus.if.org Git - esp-idf/blobdiff - components/nvs_flash/src/nvs_storage.cpp
nvs_flash: Fix nvs_set_blob hang when partition is near to FULL
[esp-idf] / components / nvs_flash / src / nvs_storage.cpp
index 461309771769aeb0d91e380c3ecbec6b5ef869f5..3ad61667cfb34249e7aff20b919223a43c1e881f 100644 (file)
@@ -180,6 +180,9 @@ esp_err_t Storage::writeMultiPageBlob(uint8_t nsIndex, const char* key, const vo
             err = mPageManager.requestNewPage();
             if (err != ESP_OK) {
                 return err;
+            } else if(getCurrentPage().getVarDataTailroom() == tailroom) {
+                /* We got the same page or we are not improving.*/
+                return ESP_ERR_NVS_NOT_ENOUGH_SPACE; 
             } else {
                 continue;
             }
@@ -257,7 +260,6 @@ esp_err_t Storage::writeItem(uint8_t nsIndex, ItemType datatype, const char* key
         err = findItem(nsIndex, datatype, key, findPage, item);
     }
 
-
     if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND) {
         return err;
     }
@@ -280,6 +282,7 @@ esp_err_t Storage::writeItem(uint8_t nsIndex, ItemType datatype, const char* key
         }
         /* Write the blob with new version*/
         err = writeMultiPageBlob(nsIndex, key, data, dataSize, nextStart);
+
         if (err == ESP_ERR_NVS_PAGE_FULL) {
             return ESP_ERR_NVS_NOT_ENOUGH_SPACE;
         }