From 61ad5ee518ddde493249014323ce97bdde97b7d1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 11 Mar 2019 15:50:52 +0100 Subject: [PATCH] fix some small memory leaks --- src/modules/module-client-node/remote-node.c | 18 ++++++++++++++---- src/pipewire/module.c | 3 ++- src/pipewire/node.c | 2 ++ src/pipewire/pipewire.c | 3 +++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/modules/module-client-node/remote-node.c b/src/modules/module-client-node/remote-node.c index 614d6be03..47c4a3d19 100644 --- a/src/modules/module-client-node/remote-node.c +++ b/src/modules/module-client-node/remote-node.c @@ -249,9 +249,18 @@ static void clear_mem(struct node_data *data, struct mem *m) } } +static void clear_link(struct node_data *data, struct link *link) +{ + link->node_id = SPA_ID_INVALID; + link->target.activation = NULL; + close(link->signalfd); + spa_list_remove(&link->target.link); +} + static void clean_transport(struct node_data *data) { struct mem *m; + struct link *l; if (data->rtsocket_source == NULL) return; @@ -262,6 +271,10 @@ static void clean_transport(struct node_data *data) clear_mem(data, m); pw_array_clear(&data->mems); + pw_array_for_each(l, &data->links) + clear_link(data, l); + pw_array_clear(&data->links); + close(data->rtwritefd); data->remote_id = SPA_ID_INVALID; } @@ -1030,10 +1043,7 @@ client_node_set_activation(void *object, res = -EINVAL; goto exit; } - link->node_id = SPA_ID_INVALID; - link->target.activation = NULL; - close(link->signalfd); - spa_list_remove(&link->target.link); + clear_link(data, link); } exit: diff --git a/src/pipewire/module.c b/src/pipewire/module.c index 023dd7ea4..409e07ea1 100644 --- a/src/pipewire/module.c +++ b/src/pipewire/module.c @@ -310,7 +310,8 @@ void pw_module_destroy(struct pw_module *module) pw_properties_free(module->properties); - dlclose(impl->hnd); + if (dlclose(impl->hnd) != 0) + pw_log_warn("dlclose failed: %s", dlerror()); free(impl); } diff --git a/src/pipewire/node.c b/src/pipewire/node.c index ef4f34ea0..b0a41055d 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -1108,6 +1108,8 @@ void pw_node_destroy(struct pw_node *node) pw_log_debug("node %p: free", node); pw_node_emit_free(node); + pw_memblock_free(node->activation); + pw_work_queue_destroy(impl->work); pw_map_clear(&node->input_port_map); diff --git a/src/pipewire/pipewire.c b/src/pipewire/pipewire.c index 6b803acc8..a87524382 100644 --- a/src/pipewire/pipewire.c +++ b/src/pipewire/pipewire.c @@ -296,6 +296,9 @@ static void configure_debug(struct support *support, const char *str) if (n_tokens > 1) support->categories = pw_split_strv(level[1], ",", INT_MAX, &n_tokens); + + if (level) + pw_free_strv(level); } /** Get a support interface