diff --git a/src/gst/gstpipewiredeviceprovider.c b/src/gst/gstpipewiredeviceprovider.c index 73f6d015f..f833d798c 100644 --- a/src/gst/gstpipewiredeviceprovider.c +++ b/src/gst/gstpipewiredeviceprovider.c @@ -551,6 +551,10 @@ gst_pipewire_device_provider_stop (GstDeviceProvider * provider) pw_remote_destroy (self->remote); self->remote = NULL; } + if (self->core) { + pw_core_destroy (self->core); + self->core = NULL; + } if (self->main_loop) { pw_thread_loop_destroy (self->main_loop); self->main_loop = NULL; diff --git a/src/gst/gstpipewiresrc.c b/src/gst/gstpipewiresrc.c index 0395b19f8..482ff60bd 100644 --- a/src/gst/gstpipewiresrc.c +++ b/src/gst/gstpipewiresrc.c @@ -194,6 +194,8 @@ gst_pipewire_src_finalize (GObject * object) clear_queue (pwsrc); + pw_core_destroy (pwsrc->core); + pwsrc->core = NULL; pw_thread_loop_destroy (pwsrc->main_loop); pwsrc->main_loop = NULL; pw_loop_destroy (pwsrc->loop); diff --git a/src/pipewire/remote.c b/src/pipewire/remote.c index f88101ae4..7236bfeca 100644 --- a/src/pipewire/remote.c +++ b/src/pipewire/remote.c @@ -274,10 +274,14 @@ int pw_remote_connect_fd(struct pw_remote *remote, int fd) void pw_remote_disconnect(struct pw_remote *remote) { struct pw_proxy *proxy, *t2; + struct pw_stream *stream, *s2; pw_log_debug("remote %p: disconnect", remote); remote->conn->disconnect(remote->conn); + spa_list_for_each_safe(stream, s2, &remote->stream_list, link) + pw_stream_destroy(stream); + spa_list_for_each_safe(proxy, t2, &remote->proxy_list, link) pw_proxy_destroy(proxy);