From e03c3311eb6fb4863e30d3fa3a798983cc83bfb0 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 28 Jun 2023 11:53:26 +0200 Subject: [PATCH] filtet-chain: instatiate only once --- src/modules/module-filter-chain.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 9e7ae04d4..2e4cc8f75 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -627,6 +627,8 @@ struct graph { uint32_t n_control; struct port **control_port; + + unsigned instantiated:1; }; struct impl { @@ -1777,6 +1779,7 @@ static void node_cleanup(struct node *node) for (i = 0; i < node->n_hndl; i++) { if (node->hndl[i] == NULL) continue; + pw_log_info("cleanup %s %d", d->name, i); if (d->deactivate) d->deactivate(node->hndl[i]); d->cleanup(node->hndl[i]); @@ -1826,6 +1829,9 @@ static void node_free(struct node *node) static void graph_cleanup(struct graph *graph) { struct node *node; + if (!graph->instantiated) + return; + graph->instantiated = false; spa_list_for_each(node, &graph->node_list, link) node_cleanup(node); } @@ -1841,6 +1847,11 @@ static int graph_instantiate(struct graph *graph) uint32_t i, j; int res; + if (graph->instantiated) + return 0; + + graph->instantiated = true; + spa_list_for_each(node, &graph->node_list, link) { float *sd = silence_data, *dd = discard_data;