Always remove a node from the UDP tree before freeing it.
[oweals/tinc.git] / src / node.c
index 9d3592535c267dcdcfca714045abf272f3c575cb..f2bb39907188c97ff365565ca029859288668a5b 100644 (file)
@@ -137,8 +137,8 @@ void node_del(node_t *n)
                edge_del(e);
        }
 
-       avl_delete(node_tree, n);
        avl_delete(node_udp_tree, n);
+       avl_delete(node_tree, n);
 }
 
 node_t *lookup_node(char *name)
@@ -176,10 +176,11 @@ void update_node_udp(node_t *n, const sockaddr_t *sa)
                n->hostname = sockaddr2hostname(&n->address);
                avl_delete(node_udp_tree, n);
                avl_insert(node_udp_tree, n);
-               logger(LOG_DEBUG, "UDP address of %s set to %s", n->name, n->hostname);
+               ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s set to %s", n->name, n->hostname);
        } else {
                memset(&n->address, 0, sizeof n->address);
-               logger(LOG_DEBUG, "UDP address of %s cleared", n->name);
+               n->hostname = 0;
+               ifdebug(PROTOCOL) logger(LOG_DEBUG, "UDP address of %s cleared", n->name);
        }
 }