From 4518eded5bbe344873d4c47ed28ade5aaac32753 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 18 Jun 2021 15:25:49 +0200 Subject: [PATCH] context: clean up the settings object as well --- src/pipewire/context.c | 2 ++ src/pipewire/core.c | 4 ++-- src/pipewire/private.h | 3 +++ src/pipewire/settings.c | 26 +++++++++++++++++++------- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/pipewire/context.c b/src/pipewire/context.c index dc2b1490c..b4e515785 100644 --- a/src/pipewire/context.c +++ b/src/pipewire/context.c @@ -462,6 +462,8 @@ void pw_context_destroy(struct pw_context *context) pw_properties_free(context->properties); pw_properties_free(context->conf); + pw_settings_clean(context); + if (impl->dbus_handle) pw_unload_spa_handle(impl->dbus_handle); diff --git a/src/pipewire/core.c b/src/pipewire/core.c index ebab6caa1..63bc48840 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -102,8 +102,8 @@ static void core_event_add_mem(void *data, uint32_t id, uint32_t type, int fd, u m = pw_mempool_import(this->pool, flags, type, fd); if (m->id != id) { - pw_log_error(NAME" %p: invalid mem id %u, expected %u", - this, id, m->id); + pw_log_error(NAME" %p: invalid mem id %u, fd:%d expected %u", + this, id, fd, m->id); pw_proxy_errorf(&this->proxy, -EINVAL, "invalid mem id %u, expected %u", id, m->id); pw_memblock_unref(m); } diff --git a/src/pipewire/private.h b/src/pipewire/private.h index ba02cc196..9c337fe7b 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -410,6 +410,8 @@ struct pw_context { struct settings defaults; /**< default parameters */ struct settings settings; /**< current parameters */ + void *settings_impl; /**< settings metadata */ + struct pw_mempool *pool; /**< global memory pool */ struct pw_map globals; /**< map of globals */ @@ -1242,6 +1244,7 @@ void pw_log_log_object(enum spa_log_level level, const char *file, int line, bool pw_log_is_default(void); int pw_settings_init(struct pw_context *context); +void pw_settings_clean(struct pw_context *context); /** \endcond */ diff --git a/src/pipewire/settings.c b/src/pipewire/settings.c index e8aef12df..9664c5d71 100644 --- a/src/pipewire/settings.c +++ b/src/pipewire/settings.c @@ -114,18 +114,18 @@ static void init_defaults(struct impl *impl) PW_ID_CORE, "clock.force-rate", "", "%d", s->clock_force_rate); } - int pw_settings_init(struct pw_context *context) { struct impl *impl; - int res; impl = calloc(1, sizeof(*impl)); if (impl == NULL) - goto error_errno; + return -errno; impl->context = context; impl->metadata = pw_context_create_metadata(context, "settings", NULL, 0); + if (impl->metadata == NULL) + goto error_free; init_defaults(impl); @@ -135,12 +135,24 @@ int pw_settings_init(struct pw_context *context) pw_impl_metadata_register(impl->metadata, NULL); + context->settings_impl = impl; + return 0; -error_errno: - res = -errno; - goto error_free; error_free: free(impl); - return res; + return -errno; +} + +void pw_settings_clean(struct pw_context *context) +{ + struct impl *impl = context->settings_impl; + + if (impl == NULL) + return; + + context->settings_impl = NULL; + if (impl->metadata != NULL) + pw_impl_metadata_destroy(impl->metadata); + free(impl); }