Fix double retain of child trees

This commit is contained in:
Max Brunsfeld 2016-01-28 23:15:22 -08:00
parent 5f27550a7a
commit 0cf59913ae
3 changed files with 18 additions and 4 deletions

View file

@ -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;

View file

@ -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());

View file

@ -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;