forked from pool/bluez
72 lines
2.2 KiB
Diff
72 lines
2.2 KiB
Diff
|
From 1873096352f518d3247f8efb3c2e0aa8804e50ac Mon Sep 17 00:00:00 2001
|
||
|
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
|
||
|
Date: Wed, 7 Feb 2018 09:35:07 -0200
|
||
|
Subject: [PATCH] core: Fixes order InterfaceAdded
|
||
|
|
||
|
Registering on the callback of MGMT_OP_READ_ADV_FEATURES causes
|
||
|
InterfacesAdded to be reschedule after the device objects which causes
|
||
|
tools such as PulseAudio to consider it invalid.
|
||
|
|
||
|
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1534857
|
||
|
---
|
||
|
src/advertising.c | 28 +++++++++++++++-------------
|
||
|
1 file changed, 15 insertions(+), 13 deletions(-)
|
||
|
|
||
|
diff --git a/src/advertising.c b/src/advertising.c
|
||
|
index 94a8c4050..970c3d87b 100644
|
||
|
--- a/src/advertising.c
|
||
|
+++ b/src/advertising.c
|
||
|
@@ -1032,14 +1032,6 @@ static void read_adv_features_callback(uint8_t status, uint16_t length,
|
||
|
if (manager->max_ads == 0)
|
||
|
return;
|
||
|
|
||
|
- if (!g_dbus_register_interface(btd_get_dbus_connection(),
|
||
|
- adapter_get_path(manager->adapter),
|
||
|
- LE_ADVERTISING_MGR_IFACE, methods,
|
||
|
- NULL, properties, manager, NULL)) {
|
||
|
- error("Failed to register " LE_ADVERTISING_MGR_IFACE);
|
||
|
- return;
|
||
|
- }
|
||
|
-
|
||
|
/* Reset existing instances */
|
||
|
if (feat->num_instances)
|
||
|
remove_advertising(manager, 0);
|
||
|
@@ -1061,19 +1053,29 @@ static struct btd_adv_manager *manager_create(struct btd_adapter *adapter)
|
||
|
}
|
||
|
|
||
|
manager->mgmt_index = btd_adapter_get_index(adapter);
|
||
|
+ manager->clients = queue_new();
|
||
|
+ manager->supported_flags = MGMT_ADV_FLAG_LOCAL_NAME;
|
||
|
+
|
||
|
+ if (!g_dbus_register_interface(btd_get_dbus_connection(),
|
||
|
+ adapter_get_path(manager->adapter),
|
||
|
+ LE_ADVERTISING_MGR_IFACE, methods,
|
||
|
+ NULL, properties, manager, NULL)) {
|
||
|
+ error("Failed to register " LE_ADVERTISING_MGR_IFACE);
|
||
|
+ goto fail;
|
||
|
+ }
|
||
|
|
||
|
if (!mgmt_send(manager->mgmt, MGMT_OP_READ_ADV_FEATURES,
|
||
|
manager->mgmt_index, 0, NULL,
|
||
|
read_adv_features_callback, manager, NULL)) {
|
||
|
error("Failed to read advertising features");
|
||
|
- manager_destroy(manager);
|
||
|
- return NULL;
|
||
|
+ goto fail;
|
||
|
}
|
||
|
|
||
|
- manager->clients = queue_new();
|
||
|
- manager->supported_flags = MGMT_ADV_FLAG_LOCAL_NAME;
|
||
|
-
|
||
|
return manager;
|
||
|
+
|
||
|
+fail:
|
||
|
+ manager_destroy(manager);
|
||
|
+ return NULL;
|
||
|
}
|
||
|
|
||
|
struct btd_adv_manager *btd_adv_manager_new(struct btd_adapter *adapter)
|
||
|
--
|
||
|
2.16.1
|
||
|
|