Re: [PATCH v3 1/4] a2dp: Fix caching endpoints for unknown version

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

 



Hi,

On Tue, May 19, 2020 at 1:03 PM Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
>
> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>
> Don't cache the capabilities of endpoints which the version is unknown
> since so capabilities may not be available in such case.
> ---
>  profiles/audio/a2dp.c  | 11 +++++++++--
>  profiles/audio/avdtp.c |  7 ++++++-
>  profiles/audio/avdtp.h |  1 +
>  3 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
> index a2ce3204d..15e211b95 100644
> --- a/profiles/audio/a2dp.c
> +++ b/profiles/audio/a2dp.c
> @@ -2667,15 +2667,22 @@ static void discover_cb(struct avdtp *session, GSList *seps,
>                                 struct avdtp_error *err, void *user_data)
>  {
>         struct a2dp_setup *setup = user_data;
> +       uint16_t version = avdtp_get_version(session);
>
> -       DBG("err %p", err);
> +       DBG("version 0x%04x err %p", version, err);
>
>         setup->seps = seps;
>         setup->err = err;
>
>         if (!err) {
>                 g_slist_foreach(seps, register_remote_sep, setup->chan);
> -               store_remote_seps(setup->chan);
> +
> +               /* Only store version has been initialized as features like
> +                * Delay Reporting may not be queried if the version in
> +                * unknown.
> +                */
> +               if (version)
> +                       store_remote_seps(setup->chan);
>         }
>
>         finalize_discover(setup);
> diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
> index b632e41c5..1fd2be051 100644
> --- a/profiles/audio/avdtp.c
> +++ b/profiles/audio/avdtp.c
> @@ -2256,7 +2256,7 @@ static uint16_t get_version(struct avdtp *session)
>         const sdp_record_t *rec;
>         sdp_list_t *protos;
>         sdp_data_t *proto_desc;
> -       uint16_t ver = 0x0100;
> +       uint16_t ver = 0x0000;
>
>         rec = btd_device_get_record(session->device, A2DP_SINK_UUID);
>         if (!rec)
> @@ -2396,6 +2396,11 @@ struct avdtp *avdtp_new(GIOChannel *chan, struct btd_device *device,
>         return session;
>  }
>
> +uint16_t avdtp_get_version(struct avdtp *session)
> +{
> +       return session->version;
> +}
> +
>  static GIOChannel *l2cap_connect(struct avdtp *session)
>  {
>         GError *err = NULL;
> diff --git a/profiles/audio/avdtp.h b/profiles/audio/avdtp.h
> index ad2cb9bcb..f1e51d4e3 100644
> --- a/profiles/audio/avdtp.h
> +++ b/profiles/audio/avdtp.h
> @@ -310,3 +310,4 @@ struct avdtp_server *avdtp_get_server(struct avdtp_local_sep *lsep);
>
>  struct avdtp *avdtp_new(GIOChannel *chan, struct btd_device *device,
>                                                         struct queue *lseps);
> +uint16_t avdtp_get_version(struct avdtp *session);
> --
> 2.25.3

Pushed.

-- 
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