mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -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,6 +3383,10 @@ static void reselect_backend(struct spa_bt_monitor *monitor)
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						spa_bt_backend_unregister_profiles(monitor->backend);
 | 
				
			||||||
 | 
						monitor->backend = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!silent)
 | 
				
			||||||
		spa_log_error(monitor->log, "Failed to start HFP/HSP backend %s",
 | 
							spa_log_error(monitor->log, "Failed to start HFP/HSP backend %s",
 | 
				
			||||||
				backend ? backend->name : "none");
 | 
									backend ? backend->name : "none");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -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