diff options
author | Evan Huus <eapache@gmail.com> | 2013-10-12 18:14:19 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-10-12 18:14:19 +0000 |
commit | 2e1497b532a3fa35dbfbcfb2b29c49c38e2c7e06 (patch) | |
tree | 2210ca0d11577b7fb1168af28f585df6c33c5d19 /epan/proto.c | |
parent | b610734a12a4fbdfddfa777c7444d6896b94093f (diff) | |
download | wireshark-2e1497b532a3fa35dbfbcfb2b29c49c38e2c7e06.tar.gz |
Revert r52569, it breaks the GUI since that sometimes has multiple trees active
at once.
svn path=/trunk/; revision=52572
Diffstat (limited to 'epan/proto.c')
-rw-r--r-- | epan/proto.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/epan/proto.c b/epan/proto.c index 21364bea24..2e1b6c5611 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -565,6 +565,13 @@ 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_) { @@ -572,7 +579,12 @@ proto_tree_free_node(proto_node *node, gpointer data _U_) proto_tree_children_foreach(node, proto_tree_free_node, NULL); - FVALUE_CLEANUP(&finfo->value); + /* free the field_info data. */ + FREE_NODE_FIELD_INFO(finfo); + node->finfo = NULL; + + /* Free the proto_node. */ + PROTO_NODE_FREE(node); } /* frees the resources that the dissection a proto_tree uses */ @@ -583,9 +595,11 @@ proto_tree_free(proto_tree *tree) proto_tree_children_foreach(tree, proto_tree_free_node, NULL); - free_node_tree_data(tree_data); + /* free root node */ + PROTO_NODE_FREE(tree); - wmem_free_all(tree_pool); + /* free tree data */ + free_node_tree_data(tree_data); } /* Is the parsing being done for a visible proto_tree or an invisible one? |