From 4130fe22fb8af7ebc02e737f2841da766e726b16 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Fri, 28 Feb 2025 12:02:26 -0500 Subject: [PATCH] shared/bap: Fix not starting released operation The release operation is intended to release CIS resources: 'Releases resources associated with an ASE, immediately decouples the ASE from any previously coupled CIS, and tears down any CIS previously established for the ASE for one or more ASEs. Valid only if ASE_State field value = 0x01 (Codec Configured), 0x02 (QoS Configured), 0x03 (Enabling), 0x04 (Streaming), or 0x05 (Disabling).' But as the stated in ASCS specification release can also be used with the likes of Codec/QoS Configured which may not require the CIS to be established and in that case released operation shall start autonomously: 'The Released operation shall be initiated autonomously by the server if: The Release operation for an ASE has been completed and the server controller has indicated that the underlying CIS for the ASE has been torn down.' --- src/shared/bap.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/shared/bap.c b/src/shared/bap.c index 8b860ce8b..f7e42fc15 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -2099,7 +2099,24 @@ static uint8_t stream_release(struct bt_bap_stream *stream, struct iovec *rsp) ascs_ase_rsp_success(rsp, stream->ep->id); - stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); + /* In case the stream IO is already down the released transition needs + * to take action immeditely. + */ + if (!stream->io) { + switch (bt_bap_stream_get_state(stream)) { + case BT_BAP_STREAM_STATE_CONFIG: + /* Released (no caching) */ + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); + stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); + break; + default: + /* Released (caching) */ + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); + stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG); + break; + } + } else + stream_set_state(stream, BT_BAP_STREAM_STATE_RELEASING); return 0; } -- 2.47.3