mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
media-session: move libcamera+bluez5 device removal to object free callback
libcamera + bluez5 devices should be freed/unloaded via the sm_object free callback, similarly as in alsa and v4l2 monitors. This ensures they are run at session_shutdown.
This commit is contained in:
parent
5b8c7c405d
commit
8ba6e98320
2 changed files with 35 additions and 25 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue