From 90054f5f3ec48e154b43a5a3f10462eef5c9c349 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 21 Apr 2020 15:53:43 +0200 Subject: [PATCH] jack: clear buffers when freeing the mixer --- pipewire-jack/src/pipewire-jack.c | 43 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index f0e72c02a..c921d0426 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -412,8 +412,30 @@ static struct mix *ensure_mix(struct client *c, struct port *port, uint32_t mix_ return mix; } +static int clear_buffers(struct client *c, struct mix *mix) +{ + struct port *port = mix->port; + struct buffer *b; + uint32_t i, j; + + pw_log_debug(NAME" %p: port %p clear buffers", c, port); + + for (i = 0; i < mix->n_buffers; i++) { + b = &mix->buffers[i]; + + for (j = 0; j < b->n_mem; j++) + pw_memmap_free(b->mem[j]); + + b->n_mem = 0; + } + mix->n_buffers = 0; + spa_list_init(&mix->queue); + return 0; +} + static void free_mix(struct client *c, struct mix *mix) { + clear_buffers(c, mix); spa_list_remove(&mix->port_link); spa_list_append(&c->free_mix, &mix->link); } @@ -1333,27 +1355,6 @@ static int client_node_remove_port(void *object, return -ENOTSUP; } -static int clear_buffers(struct client *c, struct mix *mix) -{ - struct port *port = mix->port; - struct buffer *b; - uint32_t i, j; - - pw_log_debug(NAME" %p: port %p clear buffers", c, port); - - for (i = 0; i < mix->n_buffers; i++) { - b = &mix->buffers[i]; - - for (j = 0; j < b->n_mem; j++) - pw_memmap_free(b->mem[j]); - - b->n_mem = 0; - } - mix->n_buffers = 0; - spa_list_init(&mix->queue); - return 0; -} - static int param_enum_format(struct client *c, struct port *p, struct spa_pod **param, struct spa_pod_builder *b) {