summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2020-04-21 15:53:43 +0200
committerWim Taymans <wtaymans@redhat.com>2020-04-21 15:53:43 +0200
commit90054f5f3ec48e154b43a5a3f10462eef5c9c349 (patch)
tree29fc2512466301dce50803e380b57382afe844f4
parent48036f7d131d65007e080b5a9b21d9f66f9e0722 (diff)
jack: clear buffers when freeing the mixer
-rw-r--r--pipewire-jack/src/pipewire-jack.c43
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)
{