aboutsummaryrefslogtreecommitdiffstats
path: root/epan/reassemble.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2012-08-12 20:53:17 +0000
committerBill Meier <wmeier@newsguy.com>2012-08-12 20:53:17 +0000
commit38b39b6b77262cd0276fe31905ab2d4c4b1f7a88 (patch)
tree65feb40a81977775171528114acda619a6403ccf /epan/reassemble.c
parent16b161df6a2f4acc040296fe8dc725bb4373a6f6 (diff)
Add 'fragment_table_destroy()'
svn path=/trunk/; revision=44459
Diffstat (limited to 'epan/reassemble.c')
-rw-r--r--epan/reassemble.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/epan/reassemble.c b/epan/reassemble.c
index d4862ec62a..c07a5c463e 100644
--- a/epan/reassemble.c
+++ b/epan/reassemble.c
@@ -32,8 +32,6 @@
#include <epan/reassemble.h>
-#include <epan/emem.h>
-
#include <epan/dissectors/packet-dcerpc.h>
typedef struct _fragment_key {
@@ -324,6 +322,32 @@ fragment_table_init(GHashTable **fragment_table)
}
}
+/*
+ * Destroy a fragment table.
+ */
+void
+frgment_table_destroy(GHashTable **fragment_table)
+{
+ if (*fragment_table != NULL) {
+ /*
+ * The fragment hash table exists.
+ *
+ * Remove all entries and free fragment data for each entry.
+ *
+ * The keys are freed by calling fragment_free_key()
+ * and the values are freed in free_all_fragments().
+ *
+ * free_all_fragments()
+ * will free the address data associated with the key
+ */
+ g_hash_table_foreach_remove(*fragment_table,
+ free_all_fragments, NULL);
+
+ g_hash_table_destroy(*fragment_table);
+ *fragment_table = NULL;
+ }
+}
+
void
dcerpc_fragment_table_init(GHashTable **fragment_table)
{