From f9e8e689d323e28ef58e93828695f6f1bbeabd36 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 1 Apr 2022 10:10:22 +0200 Subject: [PATCH] filter-chain: free descriptor Fixes #2220 --- src/modules/module-filter-chain.c | 2 ++ src/modules/module-filter-chain/ladspa_plugin.c | 2 +- src/modules/module-filter-chain/lv2_plugin.c | 2 +- src/modules/module-filter-chain/plugin.h | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 8d653741b..55446c928 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -816,6 +816,8 @@ static void descriptor_unref(struct descriptor *desc) spa_list_remove(&desc->link); plugin_unref(desc->plugin); + if (desc->desc) + fc_descriptor_free(desc->desc); free(desc->input); free(desc->output); free(desc->control); diff --git a/src/modules/module-filter-chain/ladspa_plugin.c b/src/modules/module-filter-chain/ladspa_plugin.c index eb56de305..76d80dc84 100644 --- a/src/modules/module-filter-chain/ladspa_plugin.c +++ b/src/modules/module-filter-chain/ladspa_plugin.c @@ -136,7 +136,7 @@ static void ladspa_port_update_ranges(struct descriptor *dd, struct fc_port *por port->max = upper; } -static void ladspa_free(struct fc_descriptor *desc) +static void ladspa_free(const struct fc_descriptor *desc) { struct descriptor *d = (struct descriptor*)desc; free(d->desc.ports); diff --git a/src/modules/module-filter-chain/lv2_plugin.c b/src/modules/module-filter-chain/lv2_plugin.c index b999e15e9..55b59a5c4 100644 --- a/src/modules/module-filter-chain/lv2_plugin.c +++ b/src/modules/module-filter-chain/lv2_plugin.c @@ -380,7 +380,7 @@ static void lv2_run(void *instance, unsigned long SampleCount) i->work_iface->end_run(i->instance); } -static void lv2_free(struct fc_descriptor *desc) +static void lv2_free(const struct fc_descriptor *desc) { struct descriptor *d = (struct descriptor*)desc; free((char*)d->desc.name); diff --git a/src/modules/module-filter-chain/plugin.h b/src/modules/module-filter-chain/plugin.h index 02ee7371c..e4f2eb5f1 100644 --- a/src/modules/module-filter-chain/plugin.h +++ b/src/modules/module-filter-chain/plugin.h @@ -66,7 +66,7 @@ struct fc_descriptor { #define FC_DESCRIPTOR_SUPPORTS_NULL_DATA (1ULL << 0) uint64_t flags; - void (*free) (struct fc_descriptor *desc); + void (*free) (const struct fc_descriptor *desc); uint32_t n_ports; struct fc_port *ports; @@ -90,7 +90,7 @@ static inline void fc_plugin_free(struct fc_plugin *plugin) plugin->unload(plugin); } -static inline void fc_descriptor_free(struct fc_descriptor *desc) +static inline void fc_descriptor_free(const struct fc_descriptor *desc) { if (desc->free) desc->free(desc);