Hi Daniel, On Fri, Oct 25, 2024 at 4:30 PM Daniel Beer <daniel.beer@xxxxxxxxxxxxxxxxx> wrote: > > If the stream goes IDLE while we have an outstanding request, connect_id > stays non-zero and is never cleared via a completion callback. As a > consequence, the profile on this device will never be connected > successfully again until BlueZ restarts. > --- > profiles/audio/source.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/profiles/audio/source.c b/profiles/audio/source.c > index 9fac352c8..db777e86d 100644 > --- a/profiles/audio/source.c > +++ b/profiles/audio/source.c > @@ -134,6 +134,11 @@ static void stream_state_changed(struct avdtp_stream *stream, > case AVDTP_STATE_IDLE: > btd_service_disconnecting_complete(source->service, 0); > > + if (source->connect_id > 0) { > + a2dp_cancel(source->connect_id); > + source->connect_id = 0; > + } > + Is this really happening or is more of a fix based on disconnect_id? If that really is happening then we need to fix the sink as well since it appears to be doing the same, that said connect_id may be set with a2dp_discover which can happen in AVDTP_STATE_IDLE so in theory that can still be ongoing, anyway this code hasn't change in very long time so I wonder if this is sort of workaround to specific model or use-case we haven't tried before? > if (source->disconnect_id > 0) { > a2dp_cancel(source->disconnect_id); > source->disconnect_id = 0; > -- > 2.43.0 > > -- Luiz Augusto von Dentz