diff options
author | Mikael Kanstrup <mikael.kanstrup@gmail.com> | 2017-09-14 14:53:18 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2017-09-20 05:47:25 +0000 |
commit | 3ce30eb1fd395251696c4cbf42b52cfd5b150404 (patch) | |
tree | 9d293fbef5a6731ebe6c0126b727411948731053 /ui | |
parent | 8f4692f6f94d06d3fa3926333d3ffd3354066f96 (diff) |
Fix leaks related to recent settings
Fix leaks related to recent settings reported by Valgrind simply after starting/stopping
application.
Bug: 14071
Change-Id: Ib4f205218945c8776724899c0dd99cc81b79a41d
Reviewed-on: https://code.wireshark.org/review/23599
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/recent.c | 35 | ||||
-rw-r--r-- | ui/recent.h | 6 |
2 files changed, 33 insertions, 8 deletions
diff --git a/ui/recent.c b/ui/recent.c index 898296c1c0..ce3ab4870f 100644 --- a/ui/recent.c +++ b/ui/recent.c @@ -121,16 +121,17 @@ static const value_string ts_seconds_values[] = { }; static void -free_col_width_info(recent_settings_t *rs) +free_col_width_data(gpointer data, gpointer user_data _U_) { - col_width_data *cfmt; + col_width_data *cfmt = (col_width_data *)data; + g_free(cfmt->cfield); + g_free(cfmt); +} - while (rs->col_width_list != NULL) { - cfmt = (col_width_data *)rs->col_width_list->data; - g_free(cfmt->cfield); - g_free(cfmt); - rs->col_width_list = g_list_remove_link(rs->col_width_list, rs->col_width_list); - } +static void +free_col_width_info(recent_settings_t *rs) +{ + g_list_foreach(rs->col_width_list, free_col_width_data, NULL); g_list_free(rs->col_width_list); rs->col_width_list = NULL; } @@ -1524,6 +1525,24 @@ recent_set_column_xalign(gint col, gchar xalign) } } +void +recent_init(void) +{ + memset(&recent, 0, sizeof(recent_settings_t)); +} + +void +recent_cleanup(void) +{ + free_col_width_info(&recent); + g_free(recent.gui_fileopen_remembered_dir); + g_list_free_full(recent.gui_additional_toolbars, g_free); + g_list_free_full(recent.interface_toolbars, g_free); + prefs_clear_string_list(recent.conversation_tabs); + prefs_clear_string_list(recent.endpoint_tabs); + prefs_clear_string_list(recent.custom_colors); +} + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * diff --git a/ui/recent.h b/ui/recent.h index d41dd60d3d..db16c29156 100644 --- a/ui/recent.h +++ b/ui/recent.h @@ -117,6 +117,12 @@ typedef struct recent_settings_tag { /** Global recent settings. */ extern recent_settings_t recent; +/** Initialize recent settings module (done at startup) */ +extern void recent_init(void); + +/** Cleanup/Frees recent settings (done at shutdown) */ +extern void recent_cleanup(void); + /** Write recent settings file. * * @return TRUE if succeeded, FALSE if failed |