summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-05-10 16:54:54 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-05-12 13:31:53 -0700
commit24b4ba1a393618b0c6b3b33f6eaa1371bfe97a6f (patch)
tree0377371efb7efc7b9bd96bbd4841a9862ede6162
parent67fd8479f11c12e396494fe80cd1965ee7ff4500 (diff)
downloadbluez-24b4ba1a393618b0c6b3b33f6eaa1371bfe97a6f.tar.gz
shared/bap: Fix not sending ASE Receiver Stop Ready
This fixes not sending ASE Receiver Stop Ready if stream is on disabling state when CIS is disconnected. Fixes: https://github.com/bluez/bluez/issues/516
-rw-r--r--src/shared/bap.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/shared/bap.c b/src/shared/bap.c
index 6131c3128..f194f466f 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -1115,6 +1115,18 @@ static bool match_stream_io(const void *data, const void *user_data)
return stream->io == io;
}
+static void stream_stop_disabling(void *data, void *user_data)
+{
+ struct bt_bap_stream *stream = data;
+
+ if (stream->io || stream->ep->state != BT_ASCS_ASE_STATE_DISABLING)
+ return;
+
+ DBG(stream->bap, "stream %p", stream);
+
+ bt_bap_stream_stop(stream, NULL, NULL);
+}
+
static bool bap_stream_io_detach(struct bt_bap_stream *stream)
{
struct bt_bap_stream *link;
@@ -1133,6 +1145,9 @@ static bool bap_stream_io_detach(struct bt_bap_stream *stream)
/* Detach link if in QoS state */
if (link->ep->state == BT_ASCS_ASE_STATE_QOS)
bap_stream_io_detach(link);
+ } else {
+ /* Links without IO on disabling state shall be stopped. */
+ queue_foreach(stream->links, stream_stop_disabling, NULL);
}
stream_io_unref(io);