summaryrefslogtreecommitdiff
path: root/epan/proto.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-10-12 18:14:19 +0000
committerEvan Huus <eapache@gmail.com>2013-10-12 18:14:19 +0000
commit2e1497b532a3fa35dbfbcfb2b29c49c38e2c7e06 (patch)
tree2210ca0d11577b7fb1168af28f585df6c33c5d19 /epan/proto.c
parentb610734a12a4fbdfddfa777c7444d6896b94093f (diff)
downloadwireshark-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.c20
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?