diff options
author | Brian Gix <brian.gix@intel.com> | 2020-05-15 18:22:03 -0700 |
---|---|---|
committer | Brian Gix <brian.gix@intel.com> | 2020-05-15 18:25:30 -0700 |
commit | d18cb97bb5cada101a5786d34241508d85227ba4 (patch) | |
tree | 09faf616918a304b9e3380c51bf06f35608da9ad /mesh | |
parent | cc0719ceae2d048e50832cea0890cff1da3d2b52 (diff) | |
download | bluez-d18cb97bb5cada101a5786d34241508d85227ba4.tar.gz |
mesh: Fix valgrind memory leak warnings
These warnings are caused by not completely freeing memory allocations
at shutdown, and are not serious, but they make valgrind output cleaner.
Diffstat (limited to 'mesh')
-rw-r--r-- | mesh/agent.c | 1 | ||||
-rw-r--r-- | mesh/mesh.c | 4 | ||||
-rw-r--r-- | mesh/net-keys.c | 6 | ||||
-rw-r--r-- | mesh/net-keys.h | 1 | ||||
-rw-r--r-- | mesh/net.c | 12 | ||||
-rw-r--r-- | mesh/net.h | 3 |
6 files changed, 25 insertions, 2 deletions
diff --git a/mesh/agent.c b/mesh/agent.c index bb52f4146..a06cc2b99 100644 --- a/mesh/agent.c +++ b/mesh/agent.c @@ -245,6 +245,7 @@ void mesh_agent_cleanup(void) return; l_queue_destroy(agents, agent_free); + agents = NULL; } diff --git a/mesh/mesh.c b/mesh/mesh.c index 23ff9c2a8..451cefbb4 100644 --- a/mesh/mesh.c +++ b/mesh/mesh.c @@ -27,6 +27,7 @@ #include "mesh/mesh-io.h" #include "mesh/node.h" #include "mesh/net.h" +#include "mesh/net-keys.h" #include "mesh/provision.h" #include "mesh/model.h" #include "mesh/dbus.h" @@ -340,8 +341,11 @@ void mesh_cleanup(void) } l_queue_destroy(pending_queue, pending_request_exit); + mesh_agent_cleanup(); node_cleanup_all(); mesh_model_cleanup(); + mesh_net_cleanup(); + net_key_cleanup(); l_dbus_object_remove_interface(dbus_get_bus(), BLUEZ_MESH_PATH, MESH_NETWORK_INTERFACE); diff --git a/mesh/net-keys.c b/mesh/net-keys.c index f7eb2ca68..7dfabf922 100644 --- a/mesh/net-keys.c +++ b/mesh/net-keys.c @@ -523,3 +523,9 @@ void net_key_beacon_disable(uint32_t id) l_timeout_remove(key->snb.timeout); key->snb.timeout = NULL; } + +void net_key_cleanup(void) +{ + l_queue_destroy(keys, l_free); + keys = NULL; +} diff --git a/mesh/net-keys.h b/mesh/net-keys.h index 9385e2c51..4f480fcda 100644 --- a/mesh/net-keys.h +++ b/mesh/net-keys.h @@ -21,6 +21,7 @@ #define KEY_REFRESH 0x01 #define IV_INDEX_UPDATE 0x02 +void net_key_cleanup(void); bool net_key_confirm(uint32_t id, const uint8_t master[16]); bool net_key_retrieve(uint32_t id, uint8_t *master); uint32_t net_key_add(const uint8_t master[16]); diff --git a/mesh/net.c b/mesh/net.c index bfb9c4435..f104be0f9 100644 --- a/mesh/net.c +++ b/mesh/net.c @@ -681,8 +681,10 @@ struct mesh_net *mesh_net_new(struct mesh_node *node) return net; } -void mesh_net_free(struct mesh_net *net) +void mesh_net_free(void *user_data) { + struct mesh_net *net = user_data; + if (!net) return; @@ -701,6 +703,14 @@ void mesh_net_free(struct mesh_net *net) l_free(net); } +void mesh_net_cleanup(void) +{ + l_queue_destroy(fast_cache, l_free); + fast_cache = NULL; + l_queue_destroy(nets, mesh_net_free); + nets = NULL; +} + bool mesh_net_set_seq_num(struct mesh_net *net, uint32_t seq) { if (!net) diff --git a/mesh/net.h b/mesh/net.h index bfc8064f3..8646d5aef 100644 --- a/mesh/net.h +++ b/mesh/net.h @@ -265,7 +265,8 @@ typedef void (*mesh_net_status_func_t)(uint16_t remote, uint8_t status, void *user_data); struct mesh_net *mesh_net_new(struct mesh_node *node); -void mesh_net_free(struct mesh_net *net); +void mesh_net_free(void *net); +void mesh_net_cleanup(void); void mesh_net_flush_msg_queues(struct mesh_net *net); void mesh_net_set_iv_index(struct mesh_net *net, uint32_t index, bool update); bool mesh_net_iv_index_update(struct mesh_net *net); |