diff options
author | Wim Taymans <wtaymans@redhat.com> | 2020-04-21 15:53:43 +0200 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2020-04-21 15:53:43 +0200 |
commit | 90054f5f3ec48e154b43a5a3f10462eef5c9c349 (patch) | |
tree | 29fc2512466301dce50803e380b57382afe844f4 | |
parent | 48036f7d131d65007e080b5a9b21d9f66f9e0722 (diff) |
jack: clear buffers when freeing the mixer
-rw-r--r-- | pipewire-jack/src/pipewire-jack.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index f0e72c02..c921d042 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) { |