gst: deviceprovider: unregister pw_core event hooks

A `pw_core` may be shared between multiple streams, device provider
instances, thus when the reference of the given component to the core
is dropped, the event handlers must be unregistered so as to avoid
use-after-free and similar issues.

Fixes #5030
Fixes: 2bc3e0ca1011a9 ("gst: deviceprodiver: Use GstPipeWireCore and some cleanups")
This commit is contained in:
Barnabás Pőcze 2025-12-24 01:10:04 +01:00
parent 3738c3fc38
commit 29bbd79830

View File

@ -792,6 +792,7 @@ gst_pipewire_device_provider_probe (GstDeviceProvider * provider)
GST_DEBUG_OBJECT (self, "disconnect");
g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
spa_hook_remove (&self->core_listener);
pw_thread_loop_unlock (self->core->loop);
g_clear_pointer (&self->core, gst_pipewire_core_release);
@ -866,6 +867,7 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider)
g_clear_pointer ((struct pw_proxy**)&self->registry, pw_proxy_destroy);
if (self->core != NULL) {
spa_hook_remove (&self->core_listener);
pw_thread_loop_unlock (self->core->loop);
}
g_clear_pointer (&self->core, gst_pipewire_core_release);