summaryrefslogtreecommitdiff
path: root/epan
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
parent16b161df6a2f4acc040296fe8dc725bb4373a6f6 (diff)
downloadwireshark-38b39b6b77262cd0276fe31905ab2d4c4b1f7a88.tar.gz
Add 'fragment_table_destroy()'
svn path=/trunk/; revision=44459
Diffstat (limited to 'epan')
-rw-r--r--epan/reassemble.c28
-rw-r--r--epan/reassemble.h7
2 files changed, 32 insertions, 3 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)
{
diff --git a/epan/reassemble.h b/epan/reassemble.h
index 5c7c1536d4..9f6c06b6ed 100644
--- a/epan/reassemble.h
+++ b/epan/reassemble.h
@@ -103,9 +103,14 @@ typedef struct _fragment_data {
typedef void *(*fragment_key_copier)(const void *key);
/*
- * Initialize a fragment table.
+ * Initialize/destroy a fragment table.
+ *
+ * init: If table doesn't exist: create table;
+ * else: just remove any entries;
+ * destroy: remove entries and destroy table;
*/
extern void fragment_table_init(GHashTable **fragment_table);
+extern void fragment_table_destroy(GHashTable **fragment_table);
extern void dcerpc_fragment_table_init(GHashTable **fragment_table);
/*