X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fsplay_tree.c;h=50d701c9c4b74ceebfe2fb9485bc6ef2ac4b3611;hb=3a149f7521dfff67e6a790c1a830afc649ae083e;hp=ee855192862863c739590e44a48272505a02bb0e;hpb=d6c8a1a3d3e945142b251b2897517e10ce0dfce4;p=tinc diff --git a/src/splay_tree.c b/src/splay_tree.c index ee855192..50d701c9 100644 --- a/src/splay_tree.c +++ b/src/splay_tree.c @@ -25,7 +25,7 @@ /* Splay operation */ static splay_node_t *splay_top_down(splay_tree_t *tree, const void *data, int *result) { - splay_node_t left = {NULL}, right = {NULL}; + splay_node_t left = {0}, right = {0}; splay_node_t *leftbottom = &left, *rightbottom = &right, *child, *grandchild; splay_node_t *root = tree->root; int c; @@ -604,12 +604,21 @@ void splay_delete(splay_tree_t *tree, void *data) { /* Fast tree cleanup */ -void splay_delete_tree(splay_tree_t *tree) { +void splay_empty_tree(splay_tree_t *tree) { for(splay_node_t *node = tree->head, *next; node; node = next) { next = node->next; splay_free_node(tree, node); } + tree->head = NULL; + tree->tail = NULL; + tree->root = NULL; + tree->count = 0; + tree->generation++; +} + +void splay_delete_tree(splay_tree_t *tree) { + splay_empty_tree(tree); splay_free_tree(tree); }