mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
bluez5: fix HFP backend behavior when BlueZ goes away
Ensure unavailable backends get unregistered. Don't log error-level messages on HFP unregistration failures.
This commit is contained in:
parent
5f7c4dec34
commit
d28b36bb93
2 changed files with 17 additions and 12 deletions
|
|
@ -2020,7 +2020,7 @@ static void unregister_profile(struct impl *backend, const char *profile)
|
||||||
m = NULL;
|
m = NULL;
|
||||||
|
|
||||||
if (r == NULL) {
|
if (r == NULL) {
|
||||||
spa_log_error(backend->log, "Unregistering Profile %s failed", profile);
|
spa_log_info(backend->log, "Unregistering Profile %s failed", profile);
|
||||||
dbus_error_free(&err);
|
dbus_error_free(&err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3360,7 +3360,7 @@ static int switch_backend(struct spa_bt_monitor *monitor, struct spa_bt_backend
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reselect_backend(struct spa_bt_monitor *monitor)
|
static void reselect_backend(struct spa_bt_monitor *monitor, bool silent)
|
||||||
{
|
{
|
||||||
struct spa_bt_backend *backend;
|
struct spa_bt_backend *backend;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
@ -3383,8 +3383,12 @@ static void reselect_backend(struct spa_bt_monitor *monitor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
spa_log_error(monitor->log, "Failed to start HFP/HSP backend %s",
|
spa_bt_backend_unregister_profiles(monitor->backend);
|
||||||
backend ? backend->name : "none");
|
monitor->backend = NULL;
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
|
spa_log_error(monitor->log, "Failed to start HFP/HSP backend %s",
|
||||||
|
backend ? backend->name : "none");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void interface_added(struct spa_bt_monitor *monitor,
|
static void interface_added(struct spa_bt_monitor *monitor,
|
||||||
|
|
@ -3412,7 +3416,7 @@ static void interface_added(struct spa_bt_monitor *monitor,
|
||||||
else if (spa_streq(interface_name, BLUEZ_PROFILE_MANAGER_INTERFACE)) {
|
else if (spa_streq(interface_name, BLUEZ_PROFILE_MANAGER_INTERFACE)) {
|
||||||
if (monitor->backends[BACKEND_NATIVE])
|
if (monitor->backends[BACKEND_NATIVE])
|
||||||
monitor->backends[BACKEND_NATIVE]->available = true;
|
monitor->backends[BACKEND_NATIVE]->available = true;
|
||||||
reselect_backend(monitor);
|
reselect_backend(monitor, false);
|
||||||
}
|
}
|
||||||
else if (spa_streq(interface_name, BLUEZ_DEVICE_INTERFACE)) {
|
else if (spa_streq(interface_name, BLUEZ_DEVICE_INTERFACE)) {
|
||||||
struct spa_bt_device *d;
|
struct spa_bt_device *d;
|
||||||
|
|
@ -3560,7 +3564,7 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *user_data)
|
||||||
dbus_message_iter_next(&it[1]);
|
dbus_message_iter_next(&it[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
reselect_backend(monitor);
|
reselect_backend(monitor, false);
|
||||||
|
|
||||||
monitor->objects_listed = true;
|
monitor->objects_listed = true;
|
||||||
|
|
||||||
|
|
@ -3612,6 +3616,11 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
|
||||||
|
|
||||||
if (has_old_owner) {
|
if (has_old_owner) {
|
||||||
spa_log_debug(monitor->log, "Bluetooth daemon disappeared");
|
spa_log_debug(monitor->log, "Bluetooth daemon disappeared");
|
||||||
|
|
||||||
|
if (monitor->backends[BACKEND_NATIVE])
|
||||||
|
monitor->backends[BACKEND_NATIVE]->available = false;
|
||||||
|
|
||||||
|
reselect_backend(monitor, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_old_owner || has_new_owner) {
|
if (has_old_owner || has_new_owner) {
|
||||||
|
|
@ -3630,10 +3639,6 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
|
||||||
device_free(d);
|
device_free(d);
|
||||||
spa_list_consume(a, &monitor->adapter_list, link)
|
spa_list_consume(a, &monitor->adapter_list, link)
|
||||||
adapter_free(a);
|
adapter_free(a);
|
||||||
|
|
||||||
if (monitor->backends[BACKEND_NATIVE])
|
|
||||||
monitor->backends[BACKEND_NATIVE]->available = false;
|
|
||||||
reselect_backend(monitor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_new_owner) {
|
if (has_new_owner) {
|
||||||
|
|
@ -3643,11 +3648,11 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
|
||||||
} else if (spa_streq(name, OFONO_SERVICE)) {
|
} else if (spa_streq(name, OFONO_SERVICE)) {
|
||||||
if (monitor->backends[BACKEND_OFONO])
|
if (monitor->backends[BACKEND_OFONO])
|
||||||
monitor->backends[BACKEND_OFONO]->available = (new_owner && *new_owner);
|
monitor->backends[BACKEND_OFONO]->available = (new_owner && *new_owner);
|
||||||
reselect_backend(monitor);
|
reselect_backend(monitor, false);
|
||||||
} else if (spa_streq(name, HSPHFPD_SERVICE)) {
|
} else if (spa_streq(name, HSPHFPD_SERVICE)) {
|
||||||
if (monitor->backends[BACKEND_HSPHFPD])
|
if (monitor->backends[BACKEND_HSPHFPD])
|
||||||
monitor->backends[BACKEND_HSPHFPD]->available = (new_owner && *new_owner);
|
monitor->backends[BACKEND_HSPHFPD]->available = (new_owner && *new_owner);
|
||||||
reselect_backend(monitor);
|
reselect_backend(monitor, false);
|
||||||
}
|
}
|
||||||
} else if (dbus_message_is_signal(m, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded")) {
|
} else if (dbus_message_is_signal(m, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded")) {
|
||||||
DBusMessageIter it;
|
DBusMessageIter it;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue