summaryrefslogtreecommitdiffstats
path: root/src/tree.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-09-05 16:58:00 +0000
committerDavid Robillard <d@drobilla.net>2011-09-05 16:58:00 +0000
commit7f70df52fafb1bbb01926ef0732f80aeb3ef90c2 (patch)
treeb96032eccf0e9856528b7dad01e7250537cbf9c8 /src/tree.c
parentbef5da42d9f102b898d26c84f4c47ac1b8f3ad6b (diff)
downloadzix-7f70df52fafb1bbb01926ef0732f80aeb3ef90c2.tar.gz
zix-7f70df52fafb1bbb01926ef0732f80aeb3ef90c2.tar.bz2
zix-7f70df52fafb1bbb01926ef0732f80aeb3ef90c2.zip
Fix memory leaks
git-svn-id: http://svn.drobilla.net/zix/trunk@4 df6676b4-ccc9-40e5-b5d6-7c4628a128e3
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/tree.c b/src/tree.c
index d319f1d..6d84938 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -553,10 +553,10 @@ ZIX_API
int
zix_tree_remove(ZixTree* t, ZixTreeIter ti)
{
- ZixTreeNode* n = ti;
- ZixTreeNode** pp = NULL; // parent pointer
- ZixTreeNode* to_balance = n->parent; // lowest node to start rebalace at
- int8_t d_balance = 0; // delta(balance) for n->parent
+ ZixTreeNode* const n = ti;
+ ZixTreeNode** pp = NULL; // parent pointer
+ ZixTreeNode* to_balance = n->parent; // lowest node to start rebalace at
+ int8_t d_balance = 0; // delta(balance) for n->parent
#ifdef ZIX_TREE_DUMP
printf("*** REMOVE %ld\n", (intptr_t)n->data);
@@ -564,6 +564,7 @@ zix_tree_remove(ZixTree* t, ZixTreeIter ti)
if ((n == t->root) && !n->left && !n->right) {
t->root = NULL;
+ free(n);
return ZIX_STATUS_SUCCESS;
}
@@ -687,6 +688,8 @@ zix_tree_remove(ZixTree* t, ZixTreeIter ti)
DUMP(t);
+ free(n);
+
#ifdef ZIX_TREE_VERIFY
if (!verify(t, t->root)) {
return ZIX_STATUS_ERROR;