aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2017-01-20 17:02:52 +0100
committerMichael Mann <mmann78@netscape.net>2017-01-21 00:28:28 +0000
commit317649f94984cf3d17f2a57badebb78d7703cdb5 (patch)
tree6a2c029b05e75c0934ccea4b1fc2d6bae0b3b2b6 /epan
parentd020990f0356f4793e00209ae99e9f2dd7b843c9 (diff)
reassemble: add cleanup routine.
Change-Id: I948d342a29aacc2212076359e5b073113c50c5de Reviewed-on: https://code.wireshark.org/review/19697 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan')
-rw-r--r--epan/epan.c2
-rw-r--r--epan/reassemble.c17
-rw-r--r--epan/reassemble.h5
3 files changed, 24 insertions, 0 deletions
diff --git a/epan/epan.c b/epan/epan.c
index 10dba580f7..d667bba165 100644
--- a/epan/epan.c
+++ b/epan/epan.c
@@ -62,6 +62,7 @@
#include "decode_as.h"
#include "dissector_filters.h"
#include "conversation_table.h"
+#include "reassemble.h"
#ifdef HAVE_LUA
#include <lua.h>
@@ -213,6 +214,7 @@ epan_cleanup(void)
decode_clear_all();
conversation_table_cleanup();
conversation_filters_cleanup();
+ reassembly_table_cleanup();
packet_cleanup();
expert_cleanup();
capture_dissector_cleanup();
diff --git a/epan/reassemble.c b/epan/reassemble.c
index d28f7f1293..b1363d8314 100644
--- a/epan/reassemble.c
+++ b/epan/reassemble.c
@@ -41,6 +41,8 @@ typedef struct _fragment_addresses_key {
guint32 id;
} fragment_addresses_key;
+GList* reassembly_table_list = NULL;
+
static guint
fragment_addresses_hash(gconstpointer k)
{
@@ -463,6 +465,8 @@ reassembly_table_init(reassembly_table *table,
table->reassembled_table = g_hash_table_new_full(reassembled_hash,
reassembled_equal, reassembled_key_free, NULL);
}
+
+ reassembly_table_list = g_list_append(reassembly_table_list, table);
}
/*
@@ -2786,6 +2790,19 @@ show_fragment_seq_tree(fragment_head *fd_head, const fragment_items *fit,
return show_fragment_errs_in_col(fd_head, fit, pinfo);
}
+void
+reassembly_table_free(gpointer p, gpointer user_data _U_)
+{
+ reassembly_table_destroy((reassembly_table*)p);
+}
+
+void
+reassembly_table_cleanup(void)
+{
+ g_list_foreach(reassembly_table_list, reassembly_table_free, NULL);
+ g_list_free(reassembly_table_list);
+}
+
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*
diff --git a/epan/reassemble.h b/epan/reassemble.h
index a99cff7bd9..4b5bcffe64 100644
--- a/epan/reassemble.h
+++ b/epan/reassemble.h
@@ -455,4 +455,9 @@ WS_DLL_PUBLIC gboolean
show_fragment_seq_tree(fragment_head *ipfd_head, const fragment_items *fit,
proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, proto_item **fi);
+/* Cleanup internal structures
+ */
+extern void
+reassembly_table_cleanup(void);
+
#endif