Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP4
bluez.25900
adapter-Fix-storing-discoverable-setting.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File adapter-Fix-storing-discoverable-setting.patch of Package bluez.25900
From b497b5942a8beb8f89ca1c359c54ad67ec843055 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Date: Thu, 24 Jun 2021 16:32:04 -0700 Subject: [PATCH] adapter: Fix storing discoverable setting discoverable setting shall only be store when changed via Discoverable property and not when discovery client set it as that be considered temporary just for the lifetime of the discovery. --- src/adapter.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) Index: bluez-5.48/src/adapter.c =================================================================== --- bluez-5.48.orig/src/adapter.c +++ bluez-5.48/src/adapter.c @@ -544,7 +544,11 @@ static void settings_changed(struct btd_ if (changed_mask & MGMT_SETTING_DISCOVERABLE) { g_dbus_emit_property_changed(dbus_conn, adapter->path, ADAPTER_INTERFACE, "Discoverable"); - store_adapter_info(adapter); + /* Only persist discoverable setting if it was not set + * temporarily by discovery. + */ + if (!adapter->discovery_discoverable) + store_adapter_info(adapter); } if (changed_mask & MGMT_SETTING_BONDABLE) { @@ -2085,8 +2089,6 @@ static bool filters_equal(struct mgmt_cp static int update_discovery_filter(struct btd_adapter *adapter) { struct mgmt_cp_start_service_discovery *sd_cp; - GSList *l; - DBG(""); @@ -2096,17 +2098,24 @@ static int update_discovery_filter(struc return -ENOMEM; } - for (l = adapter->discovery_list; l; l = g_slist_next(l)) { - struct watch_client *client = l->data; + /* Only attempt to overwrite current discoverable setting when not + * discoverable. + */ + if (!(adapter->current_settings & MGMT_OP_SET_DISCOVERABLE)) { + GSList *l; - if (!client->discovery_filter) - continue; + for (l = adapter->discovery_list; l; l = g_slist_next(l)) { + struct watch_client *client = l->data; - if (client->discovery_filter->discoverable) - break; - } + if (!client->discovery_filter) + continue; - set_discovery_discoverable(adapter, l ? true : false); + if (client->discovery_filter->discoverable) { + set_discovery_discoverable(adapter, true); + break; + } + } + } /* * If filters are equal, then don't update scan, except for when @@ -2139,8 +2148,7 @@ static int discovery_stop(struct watch_c return 0; } - if (adapter->discovery_discoverable) - set_discovery_discoverable(adapter, false); + set_discovery_discoverable(adapter, false); /* * In the idle phase of a discovery, there is no need to stop it @@ -6060,6 +6068,7 @@ static void adapter_stop(struct btd_adap g_free(adapter->current_discovery_filter); adapter->current_discovery_filter = NULL; + set_discovery_discoverable(adapter, false); adapter->discovering = false; while (adapter->connections) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor