When detaching BAP session, the session is removed from the global list, and streams do not go through normal state change cleanup, so local endpoint states are not cleaned up. This causes problems as ASE may be in busy state even though there is no stream. Fix by resetting all ASE to IDLE state after detaching all streams. --- src/shared/bap.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/shared/bap.c b/src/shared/bap.c index ed5c322b4..d4beb9818 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -5664,6 +5664,14 @@ static void stream_foreach_detach(void *data, void *user_data) stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); } +static void ep_foreach_detach(void *data, void *user_data) +{ + struct bt_bap_endpoint *ep = data; + + ep->state = BT_ASCS_ASE_STATE_IDLE; + ep->old_state = BT_ASCS_ASE_STATE_IDLE; +} + static void bap_req_detach(void *data) { struct bt_bap_req *req = data; @@ -5696,6 +5704,7 @@ void bt_bap_detach(struct bt_bap *bap) bap->att = NULL; queue_foreach(bap->streams, stream_foreach_detach, bap); + queue_foreach(bap->local_eps, ep_foreach_detach, bap); queue_foreach(bap_cbs, bap_detached, bap); } -- 2.50.1