rbtree: fixed some memory leaks.
This commit is contained in:
parent
baa6cbb316
commit
731f19553a
2 changed files with 8 additions and 4 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in a new issue