diff options
author | Bill Meier <wmeier@newsguy.com> | 2012-08-12 20:53:17 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2012-08-12 20:53:17 +0000 |
commit | 38b39b6b77262cd0276fe31905ab2d4c4b1f7a88 (patch) | |
tree | 65feb40a81977775171528114acda619a6403ccf /epan | |
parent | 16b161df6a2f4acc040296fe8dc725bb4373a6f6 (diff) | |
download | wireshark-38b39b6b77262cd0276fe31905ab2d4c4b1f7a88.tar.gz |
Add 'fragment_table_destroy()'
svn path=/trunk/; revision=44459
Diffstat (limited to 'epan')
-rw-r--r-- | epan/reassemble.c | 28 | ||||
-rw-r--r-- | epan/reassemble.h | 7 |
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); /* |