fix(bt/bluedroid): delete the unused AVRCP acceptor RCB when A2DP open fails

This commit is contained in:
Matteo Sandrin
2026-08-26 09:07:23 -04:00
committed by yangfeng
parent 69889c4097
commit e8db799e9f

View File

@@ -1348,6 +1348,7 @@ void bta_av_sig_chg(tBTA_AV_DATA *p_data)
int xx;
UINT8 mask;
tBTA_AV_LCB *p_lcb = NULL;
tBTA_AV_RCB *p_rcb = NULL;
APPL_TRACE_DEBUG("bta_av_sig_chg event: %d", event);
if (event == AVDT_CONNECT_IND_EVT) {
@@ -1425,6 +1426,20 @@ void bta_av_sig_chg(tBTA_AV_DATA *p_data)
}
}
}
/* The acceptor RCB of this link gets its shdl only when a stream opens. If no stream
* opened, nothing deletes the RCB and its AVCTP ccb leaks until the device reboots. */
if (p_lcb && p_lcb->lidx != 0 && p_lcb->lidx != (BTA_AV_NUM_LINKS + 1)) {
for (xx = 0; xx < BTA_AV_NUM_RCB; xx++) {
p_rcb = &p_cb->rcb[xx];
if (p_rcb->handle != BTA_AV_RC_HANDLE_NONE && p_rcb->lidx == p_lcb->lidx &&
p_rcb->shdl == 0 && !(p_rcb->status & BTA_AV_RC_CONN_MASK)) {
APPL_TRACE_DEBUG("bta_av_sig_chg: delete unused rcb[%d] handle:%d lidx:%d", xx,
p_rcb->handle, p_rcb->lidx);
bta_av_del_rc(p_rcb);
}
}
}
}
APPL_TRACE_DEBUG("conn_lcb: 0x%x", p_cb->conn_lcb);
}