Re: [PATCH BlueZ] shared/bap: reset local ep states on bap session detach

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux