diff options
author | Guy Harris <guy@alum.mit.edu> | 2013-03-23 02:40:37 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2013-03-23 02:40:37 +0000 |
commit | eee846b9c604bc66d642a41fe3c30f45c30bb61c (patch) | |
tree | 770db4044051c5aa7dec2eae95fe91687c802203 /epan/reassemble.c | |
parent | a2414d8909088ddb40c907886e725993e6baecb5 (diff) |
Make reassembly_table_destroy() clear the function pointers and empty
and destroy the reassembled table.
svn path=/trunk/; revision=48492
Diffstat (limited to 'epan/reassemble.c')
-rw-r--r-- | epan/reassemble.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/epan/reassemble.c b/epan/reassemble.c index 3e29947506..9a6946f0c4 100644 --- a/epan/reassemble.c +++ b/epan/reassemble.c @@ -464,6 +464,12 @@ reassembly_table_init(reassembly_table *table, void reassembly_table_destroy(reassembly_table *table) { + /* + * Clear the function pointers. + */ + table->temporary_key_func = NULL; + table->persistent_key_func = NULL; + table->free_temporary_key_func = NULL; if (table->fragment_table != NULL) { /* * The fragment hash table exists. @@ -477,9 +483,35 @@ reassembly_table_destroy(reassembly_table *table) g_hash_table_foreach_remove(table->fragment_table, free_all_fragments, NULL); + /* + * Now destroy the hash table. + */ g_hash_table_destroy(table->fragment_table); table->fragment_table = NULL; } + if (table->reassembled_table != NULL) { + GPtrArray *allocated_fragments; + + /* + * The reassembled-packet hash table exists. + * + * Remove all entries and free reassembled packet + * data and key for each entry. + */ + + allocated_fragments = g_ptr_array_new(); + g_hash_table_foreach_remove(table->reassembled_table, + free_all_reassembled_fragments, allocated_fragments); + + g_ptr_array_foreach(allocated_fragments, free_fragments, NULL); + g_ptr_array_free(allocated_fragments, TRUE); + + /* + * Now destroy the hash table. + */ + g_hash_table_destroy(table->reassembled_table); + table->reassembled_table = NULL; + } } /* |