diff options
author | Evan Huus <eapache@gmail.com> | 2013-10-12 17:57:51 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-10-12 17:57:51 +0000 |
commit | 540e9c745de9925170fc03af496cb9c2ef84bf26 (patch) | |
tree | b1451fd0ee0175e655ab255f6585438926cd48c3 /epan/proto.c | |
parent | d19a20746bf8b64f892ba0191b142c47767bd1ef (diff) |
Use wmem_free_all on the tree pool rather than freeing each node, label and
field_info separately. We still have to walk the tree in order to free certain
fvalues, but that's not a big deal. Another ~11% speed-up running "tshark -nVr"
on a large capture.
svn path=/trunk/; revision=52569
Diffstat (limited to 'epan/proto.c')
-rw-r--r-- | epan/proto.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/epan/proto.c b/epan/proto.c index 2e1b6c5611..21364bea24 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -565,13 +565,6 @@ free_node_tree_data(tree_data_t *tree_data) g_free(tree_data); } -#define FREE_NODE_FIELD_INFO(finfo) \ - if (finfo->rep) { \ - ITEM_LABEL_FREE(finfo->rep); \ - } \ - FVALUE_CLEANUP(&finfo->value); \ - FIELD_INFO_FREE(finfo); - static void proto_tree_free_node(proto_node *node, gpointer data _U_) { @@ -579,12 +572,7 @@ proto_tree_free_node(proto_node *node, gpointer data _U_) proto_tree_children_foreach(node, proto_tree_free_node, NULL); - /* free the field_info data. */ - FREE_NODE_FIELD_INFO(finfo); - node->finfo = NULL; - - /* Free the proto_node. */ - PROTO_NODE_FREE(node); + FVALUE_CLEANUP(&finfo->value); } /* frees the resources that the dissection a proto_tree uses */ @@ -595,11 +583,9 @@ proto_tree_free(proto_tree *tree) proto_tree_children_foreach(tree, proto_tree_free_node, NULL); - /* free root node */ - PROTO_NODE_FREE(tree); - - /* free tree data */ free_node_tree_data(tree_data); + + wmem_free_all(tree_pool); } /* Is the parsing being done for a visible proto_tree or an invisible one? |