Archived
1
0
Fork 0

rbtree: fixed some memory leaks.

This commit is contained in:
Henrik Hautakoski 2010-11-05 14:08:43 +01:00
parent baa6cbb316
commit 731f19553a
2 changed files with 8 additions and 4 deletions

View file

@ -198,6 +198,7 @@ int rbtree_insert(rbtree *tree, uint key, void *data, size_t len) {
tree->root = node_alloc(key, data, len); tree->root = node_alloc(key, data, len);
if (tree->root == NULL) if (tree->root == NULL)
return 0; return 0;
inserted = 1;
goto done; goto done;
} }
@ -326,7 +327,7 @@ void* rbtree_delete(rbtree *tree, uint key) {
ret = f->data; ret = f->data;
if (f != q) { if (f != q) {
f->key = q->key; f->key = q->key;
f->data = xmemdup(q->data, q->len); f->data = q->data;
f->len = q->len; f->len = q->len;
} }
swap(p, 1, q) = swap(q, 0, NULL); swap(p, 1, q) = swap(q, 0, NULL);

View file

@ -80,21 +80,23 @@ void test_insert() {
data = utest_ran_string(32); data = utest_ran_string(32);
/* insert into rbtree and assert it */ /* insert into rbtree and assert it */
ret = rbtree_insert(&tree, ckey, data, 32); ret = rbtree_insert(&tree, ckey, data, 33);
rb_assert(tree.root); rb_assert(tree.root);
dprint("INSERT: %i %s\n", ckey, data); dprint("INSERT: %i %s\n", ckey, data);
/* ignore duplicate key */ /* ignore duplicate key */
if (ret == -1) if (ret == -1) {
free(data);
continue; continue;
}
keyref[i] = ckey; keyref[i] = ckey;
dataref[i] = data; dataref[i] = data;
if (i == ((NODES/2))) { if (i == ((NODES/2))) {
search_key = ckey; search_key = ckey;
memcpy(&search_data, data, 32); memcpy(&search_data, data, 33);
} }
i++; i++;
@ -119,6 +121,7 @@ void test_delete() {
data = rbtree_delete(&tree, key); data = rbtree_delete(&tree, key);
assert_string(data, dref); assert_string(data, dref);
free(data);
rb_assert(tree.root); rb_assert(tree.root);
} }
} }