From 1fa1f838c79cfbae21f47cb4401699160cdf3d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cteng=2Ewu=E2=80=9D?= <“1045718093@qq.com”> Date: Mon, 28 Dec 2020 21:54:52 -0500 Subject: [PATCH] Fix gc error when ENV full(No dirty block) --- easyflash/src/ef_env.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/easyflash/src/ef_env.c b/easyflash/src/ef_env.c index 01bac5a..f180a30 100644 --- a/easyflash/src/ef_env.c +++ b/easyflash/src/ef_env.c @@ -1194,11 +1194,16 @@ static uint32_t new_env(sector_meta_data_t sector, size_t env_size) __retry: - if ((empty_env = alloc_env(sector, env_size)) == FAILED_ADDR && gc_request && !already_gc) { - EF_DEBUG("Warning: Alloc an ENV (size %d) failed when new ENV. Now will GC then retry.\n", env_size); - gc_collect(); - already_gc = true; - goto __retry; + if ((empty_env = alloc_env(sector, env_size)) == FAILED_ADDR) { + if (gc_request && !already_gc) { + EF_DEBUG("Warning: Alloc an ENV (size %d) failed when new ENV. Now will GC then retry.\n", env_size); + gc_collect(); + already_gc = true; + goto __retry; + } else { + EF_DEBUG("Error: Alloc an ENV (size %d) failed after GC. ENV full.\n", env_size); + gc_request = false; + } } return empty_env;