X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Frbtree%2Frbtree.c;h=753935b3dcc73647b065df9a28cd1716416505d6;hp=a6a7d38b95d3eab5883f12872ef3802c9dadd16d;hb=90768177537d783a157c06f79d5919430b563463;hpb=b581c2380721e6bd2079a80adcb28b0ed0f3552c diff --git a/ccan/rbtree/rbtree.c b/ccan/rbtree/rbtree.c index a6a7d38b..753935b3 100644 --- a/ccan/rbtree/rbtree.c +++ b/ccan/rbtree/rbtree.c @@ -442,7 +442,7 @@ trbt_delete_case1(trbt_node_t *node) } static void -delete_node(trbt_node_t *node, int from_destructor) +delete_node(trbt_node_t *node) { trbt_node_t *parent, *child, dc; trbt_node_t *temp = NULL; @@ -477,7 +477,7 @@ delete_node(trbt_node_t *node, int from_destructor) /* then delete the temp node. this node is guaranteed to have at least one leaf child */ - delete_node(temp, from_destructor); + delete_node(temp); goto finished; } @@ -550,15 +550,11 @@ delete_node(trbt_node_t *node, int from_destructor) } finished: - if (!from_destructor) { - talloc_free(node); - } - /* if we came from a destructor and temp!=NULL this means we did the node-swap but now the tree still contains the old node which was freed in the destructor. Not good. */ - if (from_destructor && temp) { + if (temp) { temp->key32 = node->key32; temp->rb_color = node->rb_color; @@ -601,7 +597,7 @@ finished: */ static int node_destructor(trbt_node_t *node) { - delete_node(node, 1); + delete_node(node); return 0; } @@ -744,7 +740,7 @@ trbt_delete32(trbt_tree_t *tree, uint32_t key) while(node){ if(key==node->key32){ - delete_node(node, 0); + talloc_free(node); return; } if(keykey32){