Re: [PATCH BlueZ bluez v2 1/2] shared/bap: Set stream to idle when I/O is disconnected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, Jun 30, 2025 at 4:06 AM Yang Li via B4 Relay
<devnull+yang.li.amlogic.com@xxxxxxxxxx> wrote:
>
> From: Yang Li <yang.li@xxxxxxxxxxx>
>
> When BIG sync is lost, the stream status transitions from Streaming to Idle.
>
>   > HCI Event: LE Meta Event (0x3e) plen 3                #3189 [hci0] 118.870863
>         LE Broadcast Isochronous Group Sync Lost (0x1e)
>                 BIG Handle: 0x00
>                 Reason: Remote User Terminated Connection (0x13)
>   = bluetoothd: src/shared/bap.c:stream_io_disconnected() stream 0..   118.871183
>   = bluetoothd: src/shared/bap.c:bap_bcast_set_state() stream 0xdf..   118.871227
>   = bluetoothd: profiles/audio/bap.c:bap_state_bcast_sink() stream..   118.871258
>   = bluetoothd: profiles/audio/bass.c:bap_state_changed() stream 0..   118.871307
>   = bluetoothd: src/gatt-database.c:send_notification_to_device()...   118.871384
>   = bluetoothd: profiles/audio/transport.c:bap_state_changed() str..   118.871452
>   = bluetoothd: profiles/audio/transport.c:transport_bap_update_li..   118.871509
>   = bluetoothd: profiles/audio/transport.c:transport_update_playin..   118.871555
>   = bluetoothd: profiles/audio/transport.c:transport_set_state() S..   118.871610
>   = bluetoothd: src/shared/bap.c:bap_bcast_sink_detach() stream 0x..   118.871660
>   = bluetoothd: profiles/audio/media.c:pac_clear() endpoint 0xdd25..   118.871689
>
> Fixes: https://github.com/bluez/bluez/issues/1343
>
> Signed-off-by: Yang Li <yang.li@xxxxxxxxxxx>
> ---
>  src/shared/bap.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/src/shared/bap.c b/src/shared/bap.c
> index bccbc73ff..984ae782d 100644
> --- a/src/shared/bap.c
> +++ b/src/shared/bap.c
> @@ -6584,6 +6584,11 @@ static bool stream_io_disconnected(struct io *io, void *user_data)
>
>         DBG(stream->bap, "stream %p io disconnected", stream);
>
> +       if (stream->lpac->type == BT_BAP_BCAST_SINK) {
> +               stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE);
> +               return false;
> +       }

The likes of bap_bcast_disable, which is what I assume such event
should result, does set it to BT_BAP_STREAM_STATE_CONFIG which I think
is the correct state since this is a about the BIG Sync not the PA
Sync, or perhaps we always assume the later as well since the socket
is disconnected the PA sync will be cleanup? In that case I'd add a
comment about it.

>         if (stream->ep->state == BT_ASCS_ASE_STATE_RELEASING)
>                 stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
>
>
> --
> 2.42.0
>
>
>


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux