From f29430239ccea0878d5993d50b689be4ce0257b5 Mon Sep 17 00:00:00 2001 From: "isha.pardikar@espressif.com" Date: Mon, 24 Apr 2023 17:35:16 +0530 Subject: [PATCH] wifi_prov_mgr: Fixed memory leak after bluetooth stack was stopping. --- components/protocomm/src/transports/protocomm_ble.c | 10 ++++++++++ components/protocomm/src/transports/protocomm_nimble.c | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/components/protocomm/src/transports/protocomm_ble.c b/components/protocomm/src/transports/protocomm_ble.c index 5af270353c..901c70026d 100644 --- a/components/protocomm/src/transports/protocomm_ble.c +++ b/components/protocomm/src/transports/protocomm_ble.c @@ -359,6 +359,15 @@ static void transport_simple_ble_connect(esp_gatts_cb_event_t event, esp_gatt_if { esp_err_t ret; ESP_LOGD(TAG, "Inside BLE connect w/ conn_id - %d", param->connect.conn_id); + +#ifdef CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV + /* Ignore BLE events received after protocomm layer is stopped */ + if (protoble_internal == NULL) { + ESP_LOGI(TAG,"Protocomm layer has already stopped"); + return; + } +#endif + if (protoble_internal->pc_ble->sec && protoble_internal->pc_ble->sec->new_transport_session) { ret = protoble_internal->pc_ble->sec->new_transport_session(protoble_internal->pc_ble->sec_inst, @@ -610,6 +619,7 @@ esp_err_t protocomm_ble_stop(protocomm_t *pc) if (ret) { ESP_LOGE(TAG, "BLE stop failed"); } + simple_ble_deinit(); #else #ifdef CONFIG_WIFI_PROV_DISCONNECT_AFTER_PROV /* Keep BT stack on, but terminate the connection after provisioning */ diff --git a/components/protocomm/src/transports/protocomm_nimble.c b/components/protocomm/src/transports/protocomm_nimble.c index 539588b2f9..9cb524b30b 100644 --- a/components/protocomm/src/transports/protocomm_nimble.c +++ b/components/protocomm/src/transports/protocomm_nimble.c @@ -582,6 +582,15 @@ static void transport_simple_ble_connect(struct ble_gap_event *event, void *arg) { esp_err_t ret; ESP_LOGD(TAG, "Inside BLE connect w/ conn_id - %d", event->connect.conn_handle); + +#ifdef CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV + /* Ignore BLE events received after protocomm layer is stopped */ + if (protoble_internal == NULL) { + ESP_LOGI(TAG,"Protocomm layer has already stopped"); + return; + } +#endif + if (protoble_internal->pc_ble->sec && protoble_internal->pc_ble->sec->new_transport_session) { ret = @@ -990,6 +999,7 @@ esp_err_t protocomm_ble_stop(protocomm_t *pc) if (ret == 0) { nimble_port_deinit(); } + free_gatt_ble_misc_memory(ble_cfg_p); #else #ifdef CONFIG_WIFI_PROV_DISCONNECT_AFTER_PROV /* Keep BT stack on, but terminate the connection after provisioning */