mirror of
https://github.com/espressif/esp-idf.git
synced 2026-09-22 13:01:16 +03:00
fix(bt/bluedroid): delete the unused AVRCP acceptor RCB when A2DP open fails
This commit is contained in:
@@ -1340,6 +1340,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) {
|
||||
@@ -1417,6 +1418,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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user