aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorMikael Kanstrup <mikael.kanstrup@gmail.com>2017-09-14 14:53:18 +0200
committerAnders Broman <a.broman58@gmail.com>2017-09-20 05:47:25 +0000
commit3ce30eb1fd395251696c4cbf42b52cfd5b150404 (patch)
tree9d293fbef5a6731ebe6c0126b727411948731053 /ui
parent8f4692f6f94d06d3fa3926333d3ffd3354066f96 (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.c35
-rw-r--r--ui/recent.h6
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