From 3509962f3ad8fe6444028f901aa3f0abbdf7c412 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 27 Oct 2021 17:41:32 +0200 Subject: [PATCH] module-session-manager: don't leak the impl structure We need to remove the listener for the object as well so that we can safely free the impl memory. --- src/modules/module-session-manager/endpoint-link.c | 2 ++ src/modules/module-session-manager/endpoint-stream.c | 2 ++ src/modules/module-session-manager/endpoint.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/modules/module-session-manager/endpoint-link.c b/src/modules/module-session-manager/endpoint-link.c index d3cc9dff6..c1940c5e4 100644 --- a/src/modules/module-session-manager/endpoint-link.c +++ b/src/modules/module-session-manager/endpoint-link.c @@ -221,6 +221,7 @@ static void global_destroy(void *data) impl->global = NULL; if (impl->resource) pw_resource_destroy(impl->resource); + free(impl); } static const struct pw_global_events global_events = { @@ -234,6 +235,7 @@ static void impl_resource_destroy(void *data) struct param_data *pdata, *tmp; spa_hook_remove(&impl->resource_listener); + spa_hook_remove(&impl->link_listener); impl->resource = NULL; /* clear cache */ diff --git a/src/modules/module-session-manager/endpoint-stream.c b/src/modules/module-session-manager/endpoint-stream.c index 967f9bab3..3d71cba83 100644 --- a/src/modules/module-session-manager/endpoint-stream.c +++ b/src/modules/module-session-manager/endpoint-stream.c @@ -212,6 +212,7 @@ static void global_destroy(void *data) impl->global = NULL; if (impl->resource) pw_resource_destroy(impl->resource); + free(impl); } static const struct pw_global_events global_events = { @@ -225,6 +226,7 @@ static void impl_resource_destroy(void *data) struct param_data *pdata, *tmp; spa_hook_remove(&impl->resource_listener); + spa_hook_remove(&impl->stream_listener); impl->resource = NULL; /* clear cache */ diff --git a/src/modules/module-session-manager/endpoint.c b/src/modules/module-session-manager/endpoint.c index a8683d13c..090933373 100644 --- a/src/modules/module-session-manager/endpoint.c +++ b/src/modules/module-session-manager/endpoint.c @@ -221,6 +221,7 @@ static void global_destroy(void *data) impl->global = NULL; if (impl->resource) pw_resource_destroy(impl->resource); + free(impl); } static const struct pw_global_events global_events = { @@ -234,6 +235,7 @@ static void impl_resource_destroy(void *data) struct param_data *pdata, *tmp; spa_hook_remove(&impl->resource_listener); + spa_hook_remove(&impl->endpoint_listener); impl->resource = NULL; /* clear cache */