device: fix advertising data UUIDs ignored when Cache = yes
PATCH 1/1 device: fix advertising data UUIDs ignored when Cache = yes
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
--- src/device.c | 6 ++++++ 1 file changed, 6 insertions(+)
src/device.c +6 -0
@@ -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 ; + } +g_dbus_emit_property_changed (dbus_conn, device->path,DEVICE_INTERFACE ,"Connected" );
Signature · 1 line
2.25.1
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=536697
---Test result---
Test Summary:
CheckPatch PASS 0.40 seconds GitLint PASS 0.11 seconds Prep - Setup ELL PASS 40.29 seconds Build - Prep PASS 0.10 seconds Build - Configure PASS 7.06 seconds Build - Make PASS 176.14 seconds Make Check PASS 8.49 seconds Make Distcheck PASS 206.82 seconds Build w/ext ELL - Configure PASS 7.13 seconds Build w/ext ELL - Make PASS 165.68 seconds
Details
##############################
Test: CheckPatch - PASS
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
##############################
Test: GitLint - PASS
Desc: Run gitlint with rule in .gitlint
##############################
Test: Prep - Setup ELL - PASS
Desc: Clone, build, and install ELL
##############################
Test: Build - Prep - PASS
Desc: Prepare environment for build
##############################
Test: Build - Configure - PASS
Desc: Configure the BlueZ source tree
##############################
Test: Build - Make - PASS
Desc: Build the BlueZ source tree
##############################
Test: Make Check - PASS
Desc: Run 'make check'
##############################
Test: Make Distcheck - PASS
Desc: Run distcheck to check the distribution
##############################
Test: Build w/ext ELL - Configure - PASS
Desc: Configure BlueZ source with '--enable-external-ell' configuration
##############################
Test: Build w/ext ELL - Make - PASS
Desc: Build BlueZ source with '--enable-external-ell' configuration
---
Regards,
Linux Bluetooth
Luiz Augusto von Dentz
maintainerHi David,
Quoted 24 lines · David Lechner
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 bothdev->le_state.svc_resolved== true anddev->eir_uuidsstill contains the UUIDs from the previous scan session.This fixes the issue by resetting both le_state.svc_resolved and
eir_uuidswhen the device is disconnected.Issue: https://github.com/bluez/bluez/issues/192
Signed-off-by David Lechner <[email protected]>--- src/device.c | 6 ++++++ 1 file changed, 6 insertions(+)src/device.c +0
-0
src/device.c void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) · line 3136
Quoted 8 lines
src/device.c +5
-0@@ -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.
Quoted 6 lines
src/device.c +0
-1g_dbus_emit_property_changed (dbus_conn, device->path,DEVICE_INTERFACE ,"Connected" ); --2.25.1
Signature · 1 line
Luiz Augusto von Dentz