shared/bap: Fix attempting to disable stream when it is idle
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 12 Sep 2022 21:21:13 +0000 (14:21 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
If the stream is already in idle state do not attempt to disable it
again.

Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/shared/bap.c

index c5f1134..7b23a33 100644 (file)
@@ -1050,13 +1050,15 @@ static void bap_stream_free(void *data)
        free(stream);
 }
 
-static void bap_ep_detach(struct bt_bap_endpoint *ep)
+static void bap_stream_detach(struct bt_bap_stream *stream)
 {
-       struct bt_bap_stream *stream = ep->stream;
+       struct bt_bap_endpoint *ep = stream->ep;
 
-       if (!stream)
+       if (!ep)
                return;
 
+       DBG(stream->bap, "stream %p ep %p", stream, ep);
+
        queue_remove(stream->bap->streams, stream);
        bap_stream_clear_cfm(stream);
 
@@ -1281,7 +1283,7 @@ static void bap_stream_state_changed(struct bt_bap_stream *stream)
        /* Post notification updates */
        switch (stream->ep->state) {
        case BT_ASCS_ASE_STATE_IDLE:
-               bap_ep_detach(stream->ep);
+               bap_stream_detach(stream);
                break;
        case BT_ASCS_ASE_STATE_QOS:
                break;
@@ -1838,7 +1840,8 @@ static uint8_t stream_disable(struct bt_bap_stream *stream, struct iovec *rsp)
 {
        DBG(stream->bap, "stream %p", stream);
 
-       if (!stream || stream->ep->state == BT_BAP_STREAM_STATE_QOS)
+       if (!stream || stream->ep->state == BT_BAP_STREAM_STATE_QOS ||
+                       stream->ep->state == BT_BAP_STREAM_STATE_IDLE)
                return 0;
 
        ascs_ase_rsp_success(rsp, stream->ep->id);