diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 97d683c27..d794679d1 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -2080,12 +2080,20 @@ static const struct pw_proxy_events core_proxy_events = { static void impl_destroy(struct impl *impl) { + /* disconnect both streams before destroying any of them */ + if (impl->capture) + pw_stream_disconnect(impl->capture); + if (impl->playback) + pw_stream_disconnect(impl->playback); + if (impl->capture) pw_stream_destroy(impl->capture); if (impl->playback) pw_stream_destroy(impl->playback); + if (impl->core && impl->do_disconnect) pw_core_disconnect(impl->core); + pw_properties_free(impl->capture_props); pw_properties_free(impl->playback_props); graph_free(&impl->graph); diff --git a/src/modules/module-loopback.c b/src/modules/module-loopback.c index cf0c2f81e..66149b347 100644 --- a/src/modules/module-loopback.c +++ b/src/modules/module-loopback.c @@ -414,8 +414,10 @@ static void impl_destroy(struct impl *impl) pw_stream_destroy(impl->capture); if (impl->playback) pw_stream_destroy(impl->playback); + if (impl->core && impl->do_disconnect) pw_core_disconnect(impl->core); + pw_properties_free(impl->capture_props); pw_properties_free(impl->playback_props); free(impl);