From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ v3 4/5] shared/bap: Use queue_foreach to notify state changes
Date: Mon, 29 Jun 2026 10:26:48 -0400 [thread overview]
Message-ID: <20260629142649.966025-4-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20260629142649.966025-1-luiz.dentz@gmail.com>
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Use queue_foreach to notify state changes since that is considered
safer as it does attempt to detect list modification while traversing
the list.
---
src/shared/bap.c | 37 ++++++++++++++++++++-----------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/src/shared/bap.c b/src/shared/bap.c
index 6086924a9cb7..7bcf28bcefe4 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -1447,10 +1447,19 @@ static bool bap_stream_io_detach(struct bt_bap_stream *stream)
return true;
}
+static void stream_state_changed(void *data, void *user_data)
+{
+ const struct bt_bap_state *state = data;
+ struct bt_bap_stream *stream = user_data;
+
+ if (state->func)
+ state->func(stream, stream->old_state, stream->state,
+ state->data);
+}
+
static void bap_stream_state_changed(struct bt_bap_stream *stream)
{
struct bt_bap *bap = stream->bap;
- const struct queue_entry *entry;
/* Pre notification updates */
switch (stream->ep->state) {
@@ -1475,14 +1484,13 @@ static void bap_stream_state_changed(struct bt_bap_stream *stream)
break;
}
- for (entry = queue_get_entries(bap->state_cbs); entry;
- entry = entry->next) {
- struct bt_bap_state *state = entry->data;
+ stream->old_state = stream->ep->old_state;
+ stream->state = stream->ep->state;
- if (state->func)
- state->func(stream, stream->ep->old_state,
- stream->ep->state, state->data);
- }
+ /* Notify callbacks using queue_foreach since it does attempt to
+ * protect against concurrent modifications to the list.
+ */
+ queue_foreach(bap->state_cbs, stream_state_changed, stream);
/* Post notification updates */
switch (stream->ep->state) {
@@ -2407,7 +2415,6 @@ static unsigned int bap_ucast_release(struct bt_bap_stream *stream,
static void bap_bcast_set_state(struct bt_bap_stream *stream, uint8_t state)
{
struct bt_bap *bap = stream->bap;
- const struct queue_entry *entry;
stream->old_state = stream->state;
stream->state = state;
@@ -2419,14 +2426,10 @@ static void bap_bcast_set_state(struct bt_bap_stream *stream, uint8_t state)
bt_bap_stream_statestr(stream->old_state),
bt_bap_stream_statestr(stream->state));
- for (entry = queue_get_entries(bap->state_cbs); entry;
- entry = entry->next) {
- struct bt_bap_state *state = entry->data;
-
- if (state->func)
- state->func(stream, stream->old_state,
- stream->state, state->data);
- }
+ /* Notify callbacks using queue_foreach since it does attempt to
+ * protect against concurrent modifications to the list.
+ */
+ queue_foreach(bap->state_cbs, stream_state_changed, stream);
/* Post notification updates */
switch (stream->state) {
--
2.54.0
next prev parent reply other threads:[~2026-06-29 14:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-29 14:26 [PATCH BlueZ v3 1/5] bass: Fix possible crash on bass_update_bis_sync Luiz Augusto von Dentz
2026-06-29 14:26 ` [PATCH BlueZ v3 2/5] shared/bap: Check if stream is valid before attempting to release Luiz Augusto von Dentz
2026-06-29 14:26 ` [PATCH BlueZ v3 3/5] shared/bap: Don't transition to IDLE inside bap_bcast_set_state Luiz Augusto von Dentz
2026-06-29 14:26 ` Luiz Augusto von Dentz [this message]
2026-06-29 17:37 ` [BlueZ,v3,1/5] bass: Fix possible crash on bass_update_bis_sync bluez.test.bot
2026-06-30 20:32 ` [PATCH BlueZ v3 1/5] " patchwork-bot+bluetooth
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=20260629142649.966025-4-luiz.dentz@gmail.com \
--to=luiz.dentz@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
/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