From 55f1818d7d983966d877bcc00d9a1ae3559c1eff Mon Sep 17 00:00:00 2001 From: Bas van den Berg Date: Fri, 17 Jun 2022 12:12:24 +0200 Subject: [PATCH] ble_conn: fix auth_pyld_timer memleak Every time a connection is made, the ble_npl_callout_init() is done. This causes a timer creation in some NPL cases (eg. FreeRTOS). The alloc behaviour of auth_pyld_timer is now in sync with ctrl_proc_rsp_timer that lives in the same struct. --- nimble/controller/src/ble_ll_conn.c | 4 ---- nimble/controller/src/ble_ll_conn_priv.h | 1 + nimble/controller/src/ble_ll_ctrl.c | 5 +++++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/nimble/controller/src/ble_ll_conn.c b/nimble/controller/src/ble_ll_conn.c index 0e2dffa04..e2eb33e3e 100644 --- a/nimble/controller/src/ble_ll_conn.c +++ b/nimble/controller/src/ble_ll_conn.c @@ -1991,10 +1991,6 @@ ble_ll_conn_sm_new(struct ble_ll_conn_sm *connsm) #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_PING) connsm->auth_pyld_tmo = BLE_LL_CONN_DEF_AUTH_PYLD_TMO; CONN_F_LE_PING_SUPP(connsm) = 1; - ble_npl_callout_init(&connsm->auth_pyld_timer, - &g_ble_ll_data.ll_evq, - ble_ll_conn_auth_pyld_timer_cb, - connsm); #endif /* Add to list of active connections */ diff --git a/nimble/controller/src/ble_ll_conn_priv.h b/nimble/controller/src/ble_ll_conn_priv.h index d0c9111b4..846a6b644 100644 --- a/nimble/controller/src/ble_ll_conn_priv.h +++ b/nimble/controller/src/ble_ll_conn_priv.h @@ -241,6 +241,7 @@ int ble_ll_conn_hci_subrate_req(const uint8_t *cmdbuf, uint8_t len, #if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_PING) void ble_ll_conn_auth_pyld_timer_start(struct ble_ll_conn_sm *connsm); +void ble_ll_conn_auth_pyld_timer_cb(struct ble_npl_event *ev); #else #define ble_ll_conn_auth_pyld_timer_start(x) #endif diff --git a/nimble/controller/src/ble_ll_ctrl.c b/nimble/controller/src/ble_ll_ctrl.c index 77f9b93ef..38b3b6d24 100644 --- a/nimble/controller/src/ble_ll_ctrl.c +++ b/nimble/controller/src/ble_ll_ctrl.c @@ -3224,5 +3224,10 @@ ble_ll_ctrl_init_conn_sm(struct ble_ll_conn_sm *connsm) { ble_npl_callout_init(&connsm->ctrl_proc_rsp_timer, &g_ble_ll_data.ll_evq, ble_ll_ctrl_proc_rsp_timer_cb, connsm); + +#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_PING) + ble_npl_callout_init(&connsm->auth_pyld_timer, &g_ble_ll_data.ll_evq, + ble_ll_conn_auth_pyld_timer_cb, connsm); +#endif } #endif