From afa091fe79fcb5055ff87097da697a30c0501f76 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 17 Aug 2018 08:49:48 +0200 Subject: [PATCH] prevent heap_caps_add_region exception if region is empty Calling `esp_bt_controller_mem_release` or `esp_bt_mem_release` might result in exception if any of the regions returned to heap are empty. This happens usually if BT/BLE is enabled, but not used/linked in the final firmware. --- components/bt/bt.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/components/bt/bt.c b/components/bt/bt.c index ba30dd861..a5d5e1424 100644 --- a/components/bt/bt.c +++ b/components/bt/bt.c @@ -885,12 +885,16 @@ esp_err_t esp_bt_controller_mem_release(esp_bt_mode_t mode) if (mode == ESP_BT_MODE_BTDM) { mem_start = (intptr_t)&_btdm_bss_start; mem_end = (intptr_t)&_btdm_bss_end; - ESP_LOGD(BTDM_LOG_TAG, "Release BTDM BSS [0x%08x] - [0x%08x]\n", mem_start, mem_end); - ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + if (mem_start != mem_end) { + ESP_LOGD(BTDM_LOG_TAG, "Release BTDM BSS [0x%08x] - [0x%08x]\n", mem_start, mem_end); + ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + } mem_start = (intptr_t)&_btdm_data_start; mem_end = (intptr_t)&_btdm_data_end; - ESP_LOGD(BTDM_LOG_TAG, "Release BTDM Data [0x%08x] - [0x%08x]\n", mem_start, mem_end); - ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + if (mem_start != mem_end) { + ESP_LOGD(BTDM_LOG_TAG, "Release BTDM Data [0x%08x] - [0x%08x]\n", mem_start, mem_end); + ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + } } return ESP_OK; } @@ -908,12 +912,16 @@ esp_err_t esp_bt_mem_release(esp_bt_mode_t mode) if (mode == ESP_BT_MODE_BTDM) { mem_start = (intptr_t)&_bt_bss_start; mem_end = (intptr_t)&_bt_bss_end; - ESP_LOGD(BTDM_LOG_TAG, "Release BT BSS [0x%08x] - [0x%08x]\n", mem_start, mem_end); - ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + if (mem_start != mem_end) { + ESP_LOGD(BTDM_LOG_TAG, "Release BT BSS [0x%08x] - [0x%08x]\n", mem_start, mem_end); + ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + } mem_start = (intptr_t)&_bt_data_start; mem_end = (intptr_t)&_bt_data_end; - ESP_LOGD(BTDM_LOG_TAG, "Release BT Data [0x%08x] - [0x%08x]\n", mem_start, mem_end); - ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + if (mem_start != mem_end) { + ESP_LOGD(BTDM_LOG_TAG, "Release BT Data [0x%08x] - [0x%08x]\n", mem_start, mem_end); + ESP_ERROR_CHECK(heap_caps_add_region(mem_start, mem_end)); + } } return ESP_OK; }