Merge branch 'master' into 'master'

gst: deviceprovider: tear down node proxies before releasing core

See merge request pipewire/pipewire!2867
This commit is contained in:
Torkel Niklasson 2026-06-30 14:21:11 +00:00
commit 9a0177a4ae

View file

@ -502,6 +502,14 @@ static const struct pw_proxy_events proxy_node_events = {
.destroy = destroy_node, .destroy = destroy_node,
}; };
static void clear_nodes(GstPipeWireDeviceProvider *self)
{
struct node_data *nd;
spa_list_consume(nd, &self->nodes, link)
pw_proxy_destroy((struct pw_proxy *)nd->proxy);
}
static void static void
removed_port (void *data) removed_port (void *data)
{ {
@ -792,6 +800,7 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
GST_DEBUG_OBJECT (self, "disconnect"); GST_DEBUG_OBJECT (self, "disconnect");
g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy); g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
clear_nodes (self);
spa_hook_remove (&self->core_listener); spa_hook_remove (&self->core_listener);
pw_thread_loop_unlock (self->core->loop); pw_thread_loop_unlock (self->core->loop);
g_clear_pointer (&self->core, gst_pipewire_core_release); g_clear_pointer (&self->core, gst_pipewire_core_release);
@ -867,6 +876,7 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider)
g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy); g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
if (self->core != NULL) { if (self->core != NULL) {
clear_nodes (self);
spa_hook_remove (&self->core_listener); spa_hook_remove (&self->core_listener);
pw_thread_loop_unlock (self->core->loop); pw_thread_loop_unlock (self->core->loop);
} }