From: Pauli Virtanen <pav@iki.fi>
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH BlueZ] shared/bap: reset local ep states on bap session detach
Date: Mon, 11 Aug 2025 20:05:48 +0300 [thread overview]
Message-ID: <84edc0cd137307d7baba0b8d3a002e7a3593d111.camel@iki.fi> (raw)
In-Reply-To: <17eac95c2065b3a21f3d647a3422b3f099cccb46.camel@iki.fi>
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
next prev parent reply other threads:[~2025-08-11 17:05 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-10 18:18 [PATCH BlueZ] shared/bap: reset local ep states on bap session detach Pauli Virtanen
2025-08-10 19:57 ` [BlueZ] " bluez.test.bot
2025-08-11 14:38 ` [PATCH BlueZ] " Luiz Augusto von Dentz
2025-08-11 16:54 ` Pauli Virtanen
2025-08-11 17:05 ` Pauli Virtanen [this message]
2025-08-11 17:05 ` Luiz Augusto von Dentz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=84edc0cd137307d7baba0b8d3a002e7a3593d111.camel@iki.fi \
--to=pav@iki.fi \
--cc=linux-bluetooth@vger.kernel.org \
--cc=luiz.dentz@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox