diff --git a/src/edge.c b/src/edge.c index f50dc1e..387ee0c 100644 --- a/src/edge.c +++ b/src/edge.c @@ -85,5 +85,7 @@ void r3_edge_free(edge * e) { if ( e->child ) { r3_tree_free(e->child); } + // free itself + zfree(e); } diff --git a/src/node.c b/src/node.c index a0d19d9..aa459cd 100644 --- a/src/node.c +++ b/src/node.c @@ -65,29 +65,29 @@ node * r3_tree_create(int cap) { } void r3_tree_free(node * tree) { - if (tree) { - for (int i = 0 ; i < tree->edge_len ; i++ ) { - if (tree->edges[i]) { - r3_edge_free(tree->edges[ i ]); - } + for (int i = 0 ; i < tree->edge_len ; i++ ) { + if (tree->edges[i]) { + r3_edge_free(tree->edges[ i ]); } - if (tree->edges) - zfree(tree->edges); - if (tree->routes) - zfree(tree->routes); - /* - if (tree->pcre_pattern) - zfree(tree->pcre_pattern); - if (tree->pcre_extra) - zfree(tree->pcre_extra); - */ - if (tree->combined_pattern) - zfree(tree->combined_pattern); - if (tree->ov) - zfree(tree->ov); - zfree(tree); - tree = NULL; } + if (tree->edges) { + zfree(tree->edges); + } + if (tree->routes) { + zfree(tree->routes); + } + /* + if (tree->pcre_pattern) + zfree(tree->pcre_pattern); + if (tree->pcre_extra) + zfree(tree->pcre_extra); + */ + if (tree->combined_pattern) + zfree(tree->combined_pattern); + if (tree->ov) + zfree(tree->ov); + zfree(tree); + tree = NULL; } diff --git a/tests/bench_str.csv b/tests/bench_str.csv index 7fb02ba..fd0f711 100644 --- a/tests/bench_str.csv +++ b/tests/bench_str.csv @@ -443,3 +443,4 @@ 1400659046,19754150.71 1400666823,6406965.25 1400666950,6684744.95 +1400667091,6771202.47 diff --git a/tests/check_tree.c b/tests/check_tree.c index cfa28c5..88904f1 100644 --- a/tests/check_tree.c +++ b/tests/check_tree.c @@ -20,9 +20,9 @@ END_TEST START_TEST (test_r3_node_construct_and_free) { node * n = r3_tree_create(10); - node * child = r3_tree_create(3); + node * another_tree = r3_tree_create(3); r3_tree_free(n); - r3_tree_free(child); + r3_tree_free(another_tree); } END_TEST