Destroy dissector tables on shutdown and use epan scoped memory of handles.

Cleans up another 600KB of "still accessible" memory.

svn path=/trunk/; revision=52531
This commit is contained in:
Evan Huus 2013-10-11 01:33:40 +00:00
parent 59e24dfb1d
commit 75ccff5744
1 changed files with 18 additions and 7 deletions

View File

@ -124,13 +124,24 @@ destroy_heuristic_dissector_list(void *data)
*list = NULL;
}
static void
destroy_dissector_table(void *data)
{
struct dissector_table *table = (struct dissector_table *)data;
g_hash_table_destroy(table->hash_table);
g_slist_free(table->dissector_handles);
g_slice_free(dissector_table_t, data);
}
void
packet_init(void)
{
dissector_tables = g_hash_table_new(g_str_hash, g_str_equal);
dissector_tables = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, destroy_dissector_table);
registered_dissectors = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, g_free);
NULL, NULL);
heur_dissector_lists = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, destroy_heuristic_dissector_list);
@ -1643,7 +1654,7 @@ register_dissector_table(const char *name, const char *ui_name, const ftenum_t t
/* Create and register the dissector table for this name; returns */
/* a pointer to the dissector table. */
sub_dissectors = (struct dissector_table *)g_malloc(sizeof (struct dissector_table));
sub_dissectors = g_slice_new(struct dissector_table);
switch (type) {
case FT_UINT8:
@ -2030,7 +2041,7 @@ create_dissector_handle(dissector_t dissector, const int proto)
{
struct dissector_handle *handle;
handle = (struct dissector_handle *)g_malloc(sizeof (struct dissector_handle));
handle = wmem_new(wmem_epan_scope(), struct dissector_handle);
handle->name = NULL;
handle->is_new = FALSE;
handle->dissector.old = dissector;
@ -2044,7 +2055,7 @@ new_create_dissector_handle(new_dissector_t dissector, const int proto)
{
struct dissector_handle *handle;
handle = (struct dissector_handle *)g_malloc(sizeof (struct dissector_handle));
handle = wmem_new(wmem_epan_scope(), struct dissector_handle);
handle->name = NULL;
handle->is_new = TRUE;
handle->dissector.new_d = dissector;
@ -2062,7 +2073,7 @@ register_dissector(const char *name, dissector_t dissector, const int proto)
/* Make sure the registration is unique */
g_assert(g_hash_table_lookup(registered_dissectors, name) == NULL);
handle = (struct dissector_handle *)g_malloc(sizeof (struct dissector_handle));
handle = wmem_new(wmem_epan_scope(), struct dissector_handle);
handle->name = name;
handle->is_new = FALSE;
handle->dissector.old = dissector;
@ -2082,7 +2093,7 @@ new_register_dissector(const char *name, new_dissector_t dissector, const int pr
/* Make sure the registration is unique */
g_assert(g_hash_table_lookup(registered_dissectors, name) == NULL);
handle = (struct dissector_handle *)g_malloc(sizeof (struct dissector_handle));
handle = wmem_new(wmem_epan_scope(), struct dissector_handle);
handle->name = name;
handle->is_new = TRUE;
handle->dissector.new_d = dissector;