From 9f34b20a9e8d8f2fd06a29c050b3431c3219141d Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Wed, 5 Mar 2025 10:42:52 +0800 Subject: [PATCH] fix(bt/bluedroid): Fixed freeing spp server memory when disconnected --- components/bt/host/bluedroid/bta/jv/bta_jv_act.c | 8 +++++--- .../bt/host/bluedroid/btc/profile/std/spp/btc_spp.c | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/components/bt/host/bluedroid/bta/jv/bta_jv_act.c b/components/bt/host/bluedroid/bta/jv/bta_jv_act.c index 214ef746af..5d232524cd 100644 --- a/components/bt/host/bluedroid/bta/jv/bta_jv_act.c +++ b/components/bt/host/bluedroid/bta/jv/bta_jv_act.c @@ -1058,7 +1058,7 @@ void sdp_bqb_add_language_attr_ctrl(BOOLEAN enable) /** * @brief Adds a protocol list and service name (if provided) to an SDP record given by - * sdp_handle, and marks it as browseable. This is a shortcut for defining a + * sdp_handle, and marks it as browsable. This is a shortcut for defining a * set of protocols that includes L2CAP, RFCOMM, and optionally OBEX. * * @param[in] sdp_handle: SDP handle @@ -1133,9 +1133,9 @@ static bool create_base_record(const uint32_t sdp_handle, const char *name, cons } } - // Mark the service as browseable. + // Mark the service as browsable. uint16_t list = UUID_SERVCLASS_PUBLIC_BROWSE_GROUP; - stage = "browseable"; + stage = "browsable"; if (!SDP_AddUuidSequence(sdp_handle, ATTR_ID_BROWSE_GROUP_LIST, 1, &list)){ APPL_TRACE_ERROR("create_base_record: failed to create base service " "record, stage: %s, scn: %d, name: %s, with_obex: %d", @@ -1754,6 +1754,7 @@ static void bta_jv_port_mgmt_cl_cback(UINT32 code, UINT16 port_handle, void* dat evt_data.rfc_close.status = BTA_JV_FAILURE; evt_data.rfc_close.port_status = code; evt_data.rfc_close.async = TRUE; + evt_data.rfc_close.user_data = p_pcb->user_data; if (p_pcb->state == BTA_JV_ST_CL_CLOSING) { evt_data.rfc_close.async = FALSE; evt_data.rfc_close.status = BTA_JV_SUCCESS; @@ -2082,6 +2083,7 @@ static void bta_jv_port_mgmt_sr_cback(UINT32 code, UINT16 port_handle, void *dat evt_data.rfc_close.status = BTA_JV_FAILURE; evt_data.rfc_close.async = TRUE; evt_data.rfc_close.port_status = code; + evt_data.rfc_close.user_data = user_data; p_pcb->cong = FALSE; tBTA_JV_RFCOMM_CBACK *p_cback = p_cb->p_cback; diff --git a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c index 181f201416..e6c22f34ec 100644 --- a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c +++ b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c @@ -1165,7 +1165,7 @@ void btc_spp_cb_handler(btc_msg_t *msg) param.close.async = p_data->rfc_close.async; if (spp_local_param.spp_mode == ESP_SPP_MODE_CB) { osi_mutex_lock(&spp_local_param.spp_slot_mutex, OSI_MUTEX_MAX_TIMEOUT); - slot = spp_find_slot_by_handle(p_data->rfc_close.handle); + slot = spp_find_slot_by_id((uint32_t)p_data->rfc_close.user_data); if (!slot) { param.close.status = ESP_SPP_NO_CONNECTION; osi_mutex_unlock(&spp_local_param.spp_slot_mutex); @@ -1179,7 +1179,7 @@ void btc_spp_cb_handler(btc_msg_t *msg) bool need_call = true; do { osi_mutex_lock(&spp_local_param.spp_slot_mutex, OSI_MUTEX_MAX_TIMEOUT); - slot = spp_find_slot_by_handle(p_data->rfc_close.handle); + slot = spp_find_slot_by_id((uint32_t)p_data->rfc_close.user_data); if (!slot) { param.close.status = ESP_SPP_NO_CONNECTION; osi_mutex_unlock(&spp_local_param.spp_slot_mutex);