Fix double retain of child trees
This commit is contained in:
parent
5f27550a7a
commit
0cf59913ae
3 changed files with 18 additions and 4 deletions
|
|
@ -320,7 +320,10 @@ describe("Stack", [&]() {
|
|||
|
||||
describe("when the first head is only one node deep", [&]() {
|
||||
it("creates a node with one null successor and one non-null successor", [&]() {
|
||||
ts_tree_retain(trees[2]);
|
||||
ts_tree_retain(trees[3]);
|
||||
TSTree *parent = ts_tree_make_node(5, 2, tree_array({ trees[2], trees[3] }), metadata);
|
||||
|
||||
tree_selection_spy.tree_to_return = parent;
|
||||
tree_selection_spy.call_count = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,9 @@ describe("Tree", []() {
|
|||
before_each([&]() {
|
||||
tree1 = ts_tree_make_leaf(cat, {2, 1, 0, 1}, {5, 4, 0, 4}, visible);
|
||||
tree2 = ts_tree_make_leaf(cat, {1, 1, 0, 1}, {3, 3, 0, 3}, visible);
|
||||
|
||||
ts_tree_retain(tree1);
|
||||
ts_tree_retain(tree2);
|
||||
parent1 = ts_tree_make_node(dog, 2, tree_array({
|
||||
tree1,
|
||||
tree2,
|
||||
|
|
@ -83,6 +86,9 @@ describe("Tree", []() {
|
|||
before_each([&]() {
|
||||
tree1->fragile_left = true;
|
||||
tree1->extra = true;
|
||||
|
||||
ts_tree_retain(tree1);
|
||||
ts_tree_retain(tree2);
|
||||
parent = ts_tree_make_node(eel, 2, tree_array({
|
||||
tree1,
|
||||
tree2,
|
||||
|
|
@ -104,6 +110,9 @@ describe("Tree", []() {
|
|||
before_each([&]() {
|
||||
tree2->fragile_right = true;
|
||||
tree2->extra = true;
|
||||
|
||||
ts_tree_retain(tree1);
|
||||
ts_tree_retain(tree2);
|
||||
parent = ts_tree_make_node(eel, 2, tree_array({
|
||||
tree1,
|
||||
tree2,
|
||||
|
|
@ -125,6 +134,9 @@ describe("Tree", []() {
|
|||
before_each([&]() {
|
||||
tree1->fragile_right = true;
|
||||
tree2->fragile_left = true;
|
||||
|
||||
ts_tree_retain(tree1);
|
||||
ts_tree_retain(tree2);
|
||||
parent = ts_tree_make_node(eel, 2, tree_array({
|
||||
tree1,
|
||||
tree2,
|
||||
|
|
@ -281,8 +293,6 @@ describe("Tree", []() {
|
|||
|
||||
AssertThat(ts_tree_eq(parent1, parent2), IsTrue());
|
||||
|
||||
ts_tree_release(tree1_copy);
|
||||
ts_tree_release(tree2_copy);
|
||||
ts_tree_release(parent2);
|
||||
});
|
||||
|
||||
|
|
@ -320,8 +330,10 @@ describe("Tree", []() {
|
|||
tree1->size,
|
||||
visible);
|
||||
|
||||
ts_tree_retain(different_tree);
|
||||
ts_tree_retain(tree2);
|
||||
TSTree *different_parent = ts_tree_make_node(dog, 2, tree_array({
|
||||
different_tree, different_tree,
|
||||
different_tree, tree2,
|
||||
}), visible);
|
||||
|
||||
AssertThat(ts_tree_eq(different_parent, parent1), IsFalse());
|
||||
|
|
|
|||
|
|
@ -82,7 +82,6 @@ void ts_tree_set_children(TSTree *self, size_t child_count, TSTree **children) {
|
|||
self->visible_child_count = 0;
|
||||
for (size_t i = 0; i < child_count; i++) {
|
||||
TSTree *child = children[i];
|
||||
ts_tree_retain(child);
|
||||
|
||||
if (i == 0) {
|
||||
self->padding = child->padding;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue