Jelajahi Sumber

Fixed some memory was not released after bluetooth controller initialization failed on ESP32

zwj 3 tahun lalu
induk
melakukan
e9bfaf9a41
2 mengubah file dengan 21 tambahan dan 27 penghapusan
  1. 20 26
      components/bt/controller/esp32/bt.c
  2. 1 1
      components/bt/controller/lib_esp32

+ 20 - 26
components/bt/controller/esp32/bt.c

@@ -325,6 +325,7 @@ static void *customer_queue_create_hlevel_wrapper(uint32_t queue_len, uint32_t i
 #endif /* CONFIG_BTDM_CTRL_HLI */
 static void interrupt_l3_disable(void);
 static void interrupt_l3_restore(void);
+static void bt_controller_deinit_internal(void);
 
 /* Local variable definition
  ***************************************************************************
@@ -1576,26 +1577,9 @@ esp_err_t esp_bt_controller_init(esp_bt_controller_config_t *cfg)
     return ESP_OK;
 
 error:
-#ifdef CONFIG_PM_ENABLE
-    if (!s_btdm_allow_light_sleep) {
-        if (s_light_sleep_pm_lock != NULL) {
-            esp_pm_lock_delete(s_light_sleep_pm_lock);
-            s_light_sleep_pm_lock = NULL;
-        }
-    }
-    if (s_pm_lock != NULL) {
-        esp_pm_lock_delete(s_pm_lock);
-        s_pm_lock = NULL;
-    }
-    if (s_btdm_slp_tmr != NULL) {
-        esp_timer_delete(s_btdm_slp_tmr);
-        s_btdm_slp_tmr = NULL;
-    }
-#endif
-    if (s_wakeup_req_sem) {
-        semphr_delete_wrapper(s_wakeup_req_sem);
-        s_wakeup_req_sem = NULL;
-    }
+
+    bt_controller_deinit_internal();
+
     return err;
 }
 
@@ -1607,6 +1591,13 @@ esp_err_t esp_bt_controller_deinit(void)
 
     btdm_controller_deinit();
 
+    bt_controller_deinit_internal();
+
+    return ESP_OK;
+}
+
+static void bt_controller_deinit_internal(void)
+{
     periph_module_disable(PERIPH_BT_MODULE);
 
 #ifdef CONFIG_PM_ENABLE
@@ -1628,11 +1619,16 @@ esp_err_t esp_bt_controller_deinit(void)
 
     s_pm_lock_acquired = false;
 #endif
-    semphr_delete_wrapper(s_wakeup_req_sem);
-    s_wakeup_req_sem = NULL;
 
-    free(osi_funcs_p);
-    osi_funcs_p = NULL;
+    if (s_wakeup_req_sem) {
+        semphr_delete_wrapper(s_wakeup_req_sem);
+        s_wakeup_req_sem = NULL;
+    }
+
+    if (osi_funcs_p) {
+        free(osi_funcs_p);
+        osi_funcs_p = NULL;
+    }
 
     btdm_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;
 
@@ -1642,8 +1638,6 @@ esp_err_t esp_bt_controller_deinit(void)
     esp_bt_power_domain_off();
 
     esp_phy_modem_deinit();
-
-    return ESP_OK;
 }
 
 static void bt_controller_shutdown(void* arg)

+ 1 - 1
components/bt/controller/lib_esp32

@@ -1 +1 @@
-Subproject commit dbaeb136cacf8c7d071f838c1053f90299f57720
+Subproject commit 9c5686aaa35436d255459312b14fb0da339c656a