Re: [PATCH BlueZ] device: fix advertising data UUIDs ignored when Cache = yes

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

 



Hi David,

On Tue, Aug 24, 2021 at 12:00 PM David Lechner <david@xxxxxxxxxxxxxx> wrote:
>
> When [GATT] Cache = yes is set in configuration BlueZ does not use
> cached UUIDs for the list of service UUIDs. However, it doesn't clear
> the in-memory list of UUIDs received from advertising data, so when
> a device is scanned, connected and disconnected, the internal state
> still reflects that the UUIDs from the advertising data have already
> been handled. device_add_eir_uuids() ignored the UUIDs from the
> advertising data because both dev->le_state.svc_resolved == true and
> dev->eir_uuids still contains the UUIDs from the previous scan session.
>
> This fixes the issue by resetting both le_state.svc_resolved and
> eir_uuids when the device is disconnected.
>
> Issue: https://github.com/bluez/bluez/issues/192
> Signed-off-by: David Lechner <david@xxxxxxxxxxxxxx>
> ---
>  src/device.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/src/device.c b/src/device.c
> index 807106812..48b9bd8d6 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -3129,6 +3129,12 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
>
>         device_update_last_seen(device, bdaddr_type);
>
> +       if (!gatt_cache_is_enabled(device)) {
> +               device->le_state.svc_resolved = false;
> +               g_slist_free_full(device->eir_uuids, g_free);
> +               device->eir_uuids = NULL;
> +       }

We might want to cleanup the eir_uuid regardless of the cache being
enabled, since the next time the device advertise it may have
completely different UUIDs, as for resetting the svc_resolved Id guess
it would be better placed at gatt_cache_cleanup since that is clearing
the db it means should be cache left with should also set svc_resolved
= false.

>         g_dbus_emit_property_changed(dbus_conn, device->path,
>                                                 DEVICE_INTERFACE, "Connected");
>
> --
> 2.25.1
>


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