ma, 2025-08-11 kello 19:54 +0300, Pauli Virtanen kirjoitti: [clip] > We could reset the endpoint state in stream_set_state() if there is no > session, if that sounds better, instead of doing it in bt_bap_detach() > like here. > > IIUC stream_set_state() is supposed to be called only for streams to > local endpoints, but not 100% sure if it's so in practice (re: > broadcast or stream_io_disconnected). Well, now that I wrote it down, of course bt_bap_detach() itself calls stream_set_state() also as BAP Client. That would change remote EP states, and not sure if we want to do that. > > > 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); > > > > This sounds more like a workaround though, the stream_foreach_detach > > should have cleaned up all existing streams and their endpoints, we > > could perhaps print a message if the ep->state is not idle then it > > means something is not quite right. > > > > > queue_foreach(bap_cbs, bap_detached, bap); > > > } > > > > > > -- > > > 2.50.1 > > > > > > > > -- Pauli Virtanen