diff --git a/src/examples/media-session/bluez-monitor.c b/src/examples/media-session/bluez-monitor.c index 61f15e8fb..ceec4d9bc 100644 --- a/src/examples/media-session/bluez-monitor.c +++ b/src/examples/media-session/bluez-monitor.c @@ -376,6 +376,23 @@ static void device_destroy(void *data) bluez5_remove_node(device, node); } +static void device_free(void *data) +{ + struct device *device = data; + + pw_log_debug("remove device %u", device->id); + spa_list_remove(&device->link); + spa_hook_remove(&device->listener); + if (device->appeared) + spa_hook_remove(&device->device_listener); + + sm_object_discard(&device->sdevice->obj); + + pw_unload_spa_handle(device->handle); + pw_properties_free(device->props); + free(device); +} + static void device_update(void *data) { struct device *device = data; @@ -398,6 +415,7 @@ static void device_update(void *data) static const struct sm_object_events device_events = { SM_VERSION_OBJECT_EVENTS, .destroy = device_destroy, + .free = device_free, .update = device_update, }; @@ -477,21 +495,7 @@ exit: static void bluez5_remove_device(struct impl *impl, struct device *device) { - struct node *node; - - pw_log_debug("remove device %u", device->id); - spa_list_remove(&device->link); - spa_hook_remove(&device->device_listener); - - spa_list_consume(node, &device->node_list, link) - bluez5_remove_node(device, node); - - if (device->sdevice) - sm_object_destroy(&device->sdevice->obj); - - pw_unload_spa_handle(device->handle); - pw_properties_free(device->props); - free(device); + sm_object_destroy(&device->sdevice->obj); } static void bluez5_enum_object_info(void *data, uint32_t id, diff --git a/src/examples/media-session/libcamera-monitor.c b/src/examples/media-session/libcamera-monitor.c index 1acaeaccf..14b9edde7 100644 --- a/src/examples/media-session/libcamera-monitor.c +++ b/src/examples/media-session/libcamera-monitor.c @@ -300,6 +300,20 @@ static void device_destroy(void *data) libcamera_remove_node(device, node); } +static void device_free(void *data) +{ + struct device *dev = data; + pw_log_debug("remove device %u", dev->id); + spa_list_remove(&dev->link); + if (dev->appeared) + spa_hook_remove(&dev->device_listener); + sm_object_discard(&dev->sdevice->obj); + spa_hook_remove(&dev->listener); + pw_unload_spa_handle(dev->handle); + pw_properties_free(dev->props); + free(dev); +} + static void device_update(void *data) { struct device *device = data; @@ -323,6 +337,7 @@ static void device_update(void *data) static const struct sm_object_events device_events = { SM_VERSION_OBJECT_EVENTS, .destroy = device_destroy, + .free = device_free, .update = device_update, }; @@ -400,16 +415,7 @@ exit: static void libcamera_remove_device(struct impl *impl, struct device *dev) { - pw_log_debug("remove device %u", dev->id); - spa_list_remove(&dev->link); - if (dev->appeared) - spa_hook_remove(&dev->device_listener); - if (dev->sdevice) - sm_object_destroy(&dev->sdevice->obj); - spa_hook_remove(&dev->listener); - pw_unload_spa_handle(dev->handle); - pw_properties_free(dev->props); - free(dev); + sm_object_destroy(&dev->sdevice->obj); } static void libcamera_udev_object_info(void *data, uint32_t id,