diff options
author | Max Dmitrichenko <dmitrmax@gmail.com> | 2017-04-19 17:31:32 -0400 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2017-06-01 16:39:00 +0000 |
commit | f45924f2a609801c51ce57752340417c3b7cf6ff (patch) | |
tree | b69ca48e1d892ae63b5b5cf85b06571c37ca6ddb /epan/dfilter | |
parent | 83b0e431dca26092fba4730294f279215036369a (diff) |
dfilter: fvt_cache use g_hash_table_new_full() API to prevent some memory leaks
Change-Id: I650c1eb1e98c7d2d2c9ec85bb6ec9b75667142a2
Reviewed-on: https://code.wireshark.org/review/21230
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'epan/dfilter')
-rw-r--r-- | epan/dfilter/dfilter-macro.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/epan/dfilter/dfilter-macro.c b/epan/dfilter/dfilter-macro.c index 68af5d0c7e..fd55c4456d 100644 --- a/epan/dfilter/dfilter-macro.c +++ b/epan/dfilter/dfilter-macro.c @@ -54,13 +54,6 @@ void dump_dfilter_macro_t(const dfilter_macro_t *m, const char *function, const #define DUMP_MACRO(m) #endif -static gboolean free_value(gpointer k _U_, gpointer v, gpointer u _U_) { - fvt_cache_entry_t* e = (fvt_cache_entry_t*)v; - wmem_free(NULL, e->repr); - g_free(e); - return TRUE; -} - static gboolean fvt_cache_cb(proto_node * node, gpointer data _U_) { field_info* finfo = PNODE_FINFO(node); fvt_cache_entry_t* e; @@ -86,8 +79,15 @@ static gboolean fvt_cache_cb(proto_node * node, gpointer data _U_) { return FALSE; } +static void dfilter_free_fvt_entry(gpointer v) +{ + fvt_cache_entry_t* e = (fvt_cache_entry_t*)v; + wmem_free(NULL, e->repr); + g_free(e); +} + void dfilter_macro_build_ftv_cache(void* tree_root) { - g_hash_table_foreach_remove(fvt_cache,free_value,NULL); + g_hash_table_remove_all(fvt_cache); proto_tree_traverse_post_order((proto_tree *)tree_root, fvt_cache_cb, NULL); } @@ -587,7 +587,7 @@ void dfilter_macro_init(void) { NULL, uat_fields); - fvt_cache = g_hash_table_new(g_str_hash,g_str_equal); + fvt_cache = g_hash_table_new_full(g_str_hash,g_str_equal, NULL, dfilter_free_fvt_entry); } void dfilter_macro_get_uat(uat_t **dfmu_ptr_ptr) { |