Fix more memory leaks and invalid free() in invitation.c.
[tinc] / src / node.c
index 850f2da..7655cae 100644 (file)
@@ -78,8 +78,9 @@ node_t *new_node(void) {
                n->late = xzalloc(replaywin);
        }
 
-       n->subnet_tree = new_subnet_tree();
-       n->edge_tree = new_edge_tree();
+       init_subnet_tree(&n->subnet_tree);
+       init_edge_tree(&n->edge_tree);
+
        n->mtu = MTU;
        n->maxmtu = MTU;
        n->udp_ping_rtt = -1;
@@ -88,21 +89,16 @@ node_t *new_node(void) {
 }
 
 void free_node(node_t *n) {
-       if(n->subnet_tree) {
-               free_subnet_tree(n->subnet_tree);
-       }
-
-       if(n->edge_tree) {
-               free_edge_tree(n->edge_tree);
-       }
+       splay_empty_tree(&n->subnet_tree);
+       splay_empty_tree(&n->edge_tree);
 
        sockaddrfree(&n->address);
 
 #ifndef DISABLE_LEGACY
-       cipher_close(n->incipher);
-       digest_close(n->indigest);
-       cipher_close(n->outcipher);
-       digest_close(n->outdigest);
+       cipher_free(&n->incipher);
+       digest_free(&n->indigest);
+       cipher_free(&n->outcipher);
+       digest_free(&n->outdigest);
 #endif
 
        ecdsa_free(n->ecdsa);
@@ -133,11 +129,11 @@ void node_add(node_t *n) {
 void node_del(node_t *n) {
        splay_delete(&node_udp_tree, n);
 
-       for splay_each(subnet_t, s, n->subnet_tree) {
+       for splay_each(subnet_t, s, &n->subnet_tree) {
                subnet_del(n, s);
        }
 
-       for splay_each(edge_t, e, n->edge_tree) {
+       for splay_each(edge_t, e, &n->edge_tree) {
                edge_del(e);
        }