From 768dbeb83ce174c2cef4cdda68861abd5910ca88 Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Tue, 18 Apr 2023 14:37:53 +0530 Subject: [PATCH] Fixes for memory leak / optimization --- nimble/host/include/host/ble_hs_pvcy.h | 2 ++ nimble/host/src/ble_gatts.c | 2 ++ nimble/host/src/ble_hs.c | 6 ++++++ nimble/host/src/ble_hs_resolv.c | 5 +++++ porting/nimble/src/nimble_port.c | 2 ++ porting/npl/freertos/src/npl_os_freertos.c | 10 ++++++++++ 6 files changed, 27 insertions(+) diff --git a/nimble/host/include/host/ble_hs_pvcy.h b/nimble/host/include/host/ble_hs_pvcy.h index 49a8866ca..4b6c39d8f 100644 --- a/nimble/host/include/host/ble_hs_pvcy.h +++ b/nimble/host/include/host/ble_hs_pvcy.h @@ -64,6 +64,8 @@ extern "C" { * return appropriate error code otherwise */ int ble_hs_pvcy_rpa_config(uint8_t enable); + +void ble_hs_resolv_deinit(void); #endif int ble_hs_pvcy_set_resolve_enabled(int enable); diff --git a/nimble/host/src/ble_gatts.c b/nimble/host/src/ble_gatts.c index 1ed45b36e..21565f0c0 100644 --- a/nimble/host/src/ble_gatts.c +++ b/nimble/host/src/ble_gatts.c @@ -1265,6 +1265,8 @@ ble_gatts_start(void) goto done; } + memset (ble_gatts_clt_cfgs, 0, sizeof *ble_gatts_clt_cfgs); + /* Fill the cache. */ idx = 0; ha = NULL; diff --git a/nimble/host/src/ble_hs.c b/nimble/host/src/ble_hs.c index c013ad9d1..5be54d7a1 100644 --- a/nimble/host/src/ble_hs.c +++ b/nimble/host/src/ble_hs.c @@ -30,6 +30,8 @@ #include "nimble/nimble_port.h" #endif +#include "host/ble_hs_pvcy.h" + #define BLE_HS_HCI_EVT_COUNT (MYNEWT_VAL(BLE_TRANSPORT_EVT_COUNT) + \ MYNEWT_VAL(BLE_TRANSPORT_EVT_DISCARDABLE_COUNT)) @@ -583,6 +585,7 @@ ble_hs_enqueue_hci_event(uint8_t *hci_evt) ev = os_memblock_get(&ble_hs_hci_ev_pool); if (ev && ble_hs_evq->eventq) { + memset (ev, 0, sizeof *ev); ble_npl_event_init(ev, ble_hs_event_rx_hci_ev, hci_evt); ble_npl_eventq_put(ble_hs_evq, ev); } else { @@ -886,4 +889,7 @@ ble_hs_deinit(void) ble_npl_callout_deinit(&ble_hs_timer); +#if (MYNEWT_VAL(BLE_HOST_BASED_PRIVACY)) + ble_hs_resolv_deinit(); +#endif } diff --git a/nimble/host/src/ble_hs_resolv.c b/nimble/host/src/ble_hs_resolv.c index 1c2721a03..52bc04c20 100644 --- a/nimble/host/src/ble_hs_resolv.c +++ b/nimble/host/src/ble_hs_resolv.c @@ -767,4 +767,9 @@ void ble_hs_resolv_init(void) NULL); } +void ble_hs_resolv_deinit(void) +{ + ble_npl_callout_stop(&g_ble_hs_resolv_data.rpa_timer); + ble_npl_callout_deinit(&g_ble_hs_resolv_data.rpa_timer); +} #endif /* if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) */ diff --git a/porting/nimble/src/nimble_port.c b/porting/nimble/src/nimble_port.c index 1aeb000d3..8131e313c 100644 --- a/porting/nimble/src/nimble_port.c +++ b/porting/nimble/src/nimble_port.c @@ -233,6 +233,8 @@ nimble_port_stop(void) ble_npl_sem_deinit(&ble_hs_stop_sem); + ble_npl_event_deinit(&ble_hs_ev_stop); + return ESP_OK; } diff --git a/porting/npl/freertos/src/npl_os_freertos.c b/porting/npl/freertos/src/npl_os_freertos.c index d3cd19587..57b21325c 100644 --- a/porting/npl/freertos/src/npl_os_freertos.c +++ b/porting/npl/freertos/src/npl_os_freertos.c @@ -1175,18 +1175,23 @@ _error: #if SOC_ESP_NIMBLE_CONTROLLER if(ble_freertos_ev_buf) { free(ble_freertos_ev_buf); + ble_freertos_ev_buf = NULL; } if(ble_freertos_evq_buf) { free(ble_freertos_evq_buf); + ble_freertos_evq_buf = NULL; } if(ble_freertos_co_buf) { free(ble_freertos_co_buf); + ble_freertos_co_buf = NULL; } if(ble_freertos_sem_buf) { free(ble_freertos_sem_buf); + ble_freertos_sem_buf = NULL; } if(ble_freertos_mutex_buf) { free(ble_freertos_mutex_buf); + ble_freertos_mutex_buf = NULL; } return -1; #else @@ -1201,18 +1206,23 @@ void npl_freertos_mempool_deinit(void) #if SOC_ESP_NIMBLE_CONTROLLER if(ble_freertos_ev_buf) { free(ble_freertos_ev_buf); + ble_freertos_ev_buf = NULL; } if(ble_freertos_evq_buf) { free(ble_freertos_evq_buf); + ble_freertos_evq_buf = NULL; } if(ble_freertos_co_buf) { free(ble_freertos_co_buf); + ble_freertos_co_buf = NULL; } if(ble_freertos_sem_buf) { free(ble_freertos_sem_buf); + ble_freertos_sem_buf = NULL; } if(ble_freertos_mutex_buf) { free(ble_freertos_mutex_buf); + ble_freertos_mutex_buf = NULL; } #endif }