diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c index 8119e26ef..a6c949e39 100644 --- a/spa/plugins/bluez5/bluez5-dbus.c +++ b/spa/plugins/bluez5/bluez5-dbus.c @@ -757,6 +757,7 @@ static int device_connected_old(struct spa_bt_monitor *monitor, struct spa_bt_de info.props = &SPA_DICT_INIT(items, n_items); spa_device_emit_object_info(&monitor->hooks, device->id, &info); } else { + device->added = false; battery_remove(device); spa_bt_device_release_transports(device); spa_device_emit_object_info(&monitor->hooks, device->id, NULL); @@ -833,10 +834,6 @@ static int device_connected(struct spa_bt_monitor *monitor, struct spa_bt_device info.props = &SPA_DICT_INIT(items, n_items); spa_device_emit_object_info(&monitor->hooks, device->id, &info); - if(!init && !device->connected) { - spa_device_emit_object_info(&monitor->hooks, device->id, NULL); - } - return 0; } diff --git a/src/examples/media-session/bluez-monitor.c b/src/examples/media-session/bluez-monitor.c index 6d324bda3..9481d4472 100644 --- a/src/examples/media-session/bluez-monitor.c +++ b/src/examples/media-session/bluez-monitor.c @@ -452,15 +452,23 @@ exit: return NULL; } -static void bluez5_remove_device(struct impl *impl, struct device *device) +static void bluez5_device_free(struct device *device) { - - pw_log_debug("remove device %u", device->id); - if (device->sdevice) { sm_object_destroy(&device->sdevice->obj); device->sdevice = NULL; } + spa_list_remove(&device->link); + pw_unload_spa_handle(device->handle); + pw_properties_free(device->props); + free(device); +} + +static void bluez5_remove_device(struct impl *impl, struct device *device) +{ + + pw_log_debug("remove device %u", device->id); + bluez5_device_free(device); } static void bluez5_update_device(struct impl *impl, struct device *device, @@ -484,24 +492,19 @@ static void bluez5_update_device(struct impl *impl, struct device *device, device->sdevice = sm_media_session_export_device(impl->session, &device->props->dict, device->device); if (device->sdevice == NULL) { - bluez5_remove_device(impl, device); + bluez5_device_free(device); return; } sm_object_add_listener(&device->sdevice->obj, &device->listener, &device_events, device); + } else if (device->sdevice != NULL && !connected) { + sm_object_destroy(&device->sdevice->obj); + device->sdevice = NULL; } } -static void bluez5_device_free(struct device *device) -{ - spa_list_remove(&device->link); - pw_unload_spa_handle(device->handle); - pw_properties_free(device->props); - free(device); -} - static void bluez5_enum_object_info(void *data, uint32_t id, const struct spa_device_object_info *info) {