From 42f3ed145daf9ebf3c15474b01a1435370ab2b3f Mon Sep 17 00:00:00 2001 From: Jin Cheng Date: Fri, 27 Mar 2026 10:51:30 +0800 Subject: [PATCH] fix(bt/bluedroid): flushed all the DM PM at the end of SPP deinit --- components/bt/host/bluedroid/bta/jv/bta_jv_act.c | 15 ++++++++++++++- components/bt/host/bluedroid/bta/jv/bta_jv_api.c | 5 ----- 2 files changed, 14 insertions(+), 6 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 45777b3873..bf0d91545b 100644 --- a/components/bt/host/bluedroid/bta/jv/bta_jv_act.c +++ b/components/bt/host/bluedroid/bta/jv/bta_jv_act.c @@ -748,7 +748,20 @@ void bta_jv_disable (tBTA_JV_MSG *p_data) { tBTA_JV_STATUS evt_data; evt_data = BTA_JV_SUCCESS; - // UNUSED(p_data); + + // clear all the pm_cb slots + for (int i = 0; i < BTA_JV_PM_MAX_NUM; i++) { + if (bta_jv_cb.pm_cb[i].state != BTA_JV_PM_FREE_ST) { + bta_jv_clear_pm_cb(&bta_jv_cb.pm_cb[i], TRUE); + } + } + + // reset the control block + memset(&bta_jv_cb, 0, sizeof(tBTA_JV_CB)); + for (int i = 0; i < BTA_JV_PM_MAX_NUM; i++) { + bta_jv_cb.pm_cb[i].handle = BTA_JV_PM_HANDLE_CLEAR; + } + if (p_data->disable.p_cback) { p_data->disable.p_cback(BTA_JV_DISABLE_EVT, (tBTA_JV *)&evt_data, NULL); } diff --git a/components/bt/host/bluedroid/bta/jv/bta_jv_api.c b/components/bt/host/bluedroid/bta/jv/bta_jv_api.c index cfa0ff9091..79518e6917 100644 --- a/components/bt/host/bluedroid/bta/jv/bta_jv_api.c +++ b/components/bt/host/bluedroid/bta/jv/bta_jv_api.c @@ -118,11 +118,6 @@ void BTA_JvDisable(tBTA_JV_RFCOMM_CBACK *p_cback) APPL_TRACE_API( "BTA_JvDisable"); bta_sys_deregister(BTA_ID_JV); - memset(&bta_jv_cb, 0, sizeof(tBTA_JV_CB)); - /* set handle to invalid value by default */ - for (int i = 0; i < BTA_JV_PM_MAX_NUM; i++) { - bta_jv_cb.pm_cb[i].handle = BTA_JV_PM_HANDLE_CLEAR; - } if ((p_buf = (tBTA_JV_API_DISABLE *) osi_malloc(sizeof(tBTA_JV_API_DISABLE))) != NULL) { p_buf->hdr.event = BTA_JV_API_DISABLE_EVT; p_buf->p_cback = p_cback;