From 9ced31a2d7a78e22454aba5fa1a0f2655e2a57cf Mon Sep 17 00:00:00 2001 From: Dario Lombardo Date: Fri, 3 Feb 2017 23:15:56 +0100 Subject: filter_list: add cleanup function and call it on exit. Change-Id: I51d8074cc5a63d4fd3af8852df120d6b4163217f Reviewed-on: https://code.wireshark.org/review/19942 Reviewed-by: Michael Mann --- filter_files.c | 17 +++++++++++++++++ filter_files.h | 5 +++++ sharkd.c | 1 + tshark.c | 1 + ui/gtk/main.c | 1 + ui/qt/wireshark_application.cpp | 5 +++++ ui/qt/wireshark_application.h | 1 + 7 files changed, 31 insertions(+) diff --git a/filter_files.c b/filter_files.c index 739712f38b..566c48e8e4 100644 --- a/filter_files.c +++ b/filter_files.c @@ -90,6 +90,23 @@ add_filter_entry(GList *fl, const char *filt_name, const char *filt_expr) return g_list_append(fl, filt); } +static void +free_filter_entry(gpointer data) +{ + filter_def *filt = (filter_def*)data; + g_free(filt->name); + g_free(filt->strval); + g_free(filt); +} + +void free_filter_lists(void) +{ + g_list_free_full(capture_filters, free_filter_entry); + g_list_free_full(display_filters, free_filter_entry); + g_list_free_full(capture_edited_filters, free_filter_entry); + g_list_free_full(display_edited_filters, free_filter_entry); +} + static GList * remove_filter_entry(GList *fl, GList *fl_entry) { diff --git a/filter_files.h b/filter_files.h index b63ddca2ba..9907fe7513 100644 --- a/filter_files.h +++ b/filter_files.h @@ -89,6 +89,11 @@ void save_filter_list(filter_list_type_t list_type, char **pref_path_return, */ void copy_filter_list(filter_list_type_t dest_type, filter_list_type_t src_type); +/* + * Free all filter lists + */ +void free_filter_lists(void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/sharkd.c b/sharkd.c index 51ad753082..dae6111d9c 100644 --- a/sharkd.c +++ b/sharkd.c @@ -298,6 +298,7 @@ main(int argc, char *argv[]) ret = sharkd_loop(); clean_exit: col_cleanup(&cfile.cinfo); + free_filter_lists(); return ret; } diff --git a/tshark.c b/tshark.c index d883e02d9b..8570d3497f 100644 --- a/tshark.c +++ b/tshark.c @@ -2201,6 +2201,7 @@ clean_exit: capture_opts_cleanup(&global_capture_opts); #endif col_cleanup(&cfile.cinfo); + free_filter_lists(); return exit_status; } diff --git a/ui/gtk/main.c b/ui/gtk/main.c index b62ffd35b9..ff2751ea5b 100644 --- a/ui/gtk/main.c +++ b/ui/gtk/main.c @@ -2815,6 +2815,7 @@ clean_exit: capture_opts_cleanup(&global_capture_opts); #endif col_cleanup(&cfile.cinfo); + free_filter_lists(); return ret; } diff --git a/ui/qt/wireshark_application.cpp b/ui/qt/wireshark_application.cpp index f9bcfd7a83..a136bc3d74 100644 --- a/ui/qt/wireshark_application.cpp +++ b/ui/qt/wireshark_application.cpp @@ -716,6 +716,11 @@ WiresharkApplication::WiresharkApplication(int &argc, char **argv) : connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(cleanup())); } +WiresharkApplication::~WiresharkApplication() +{ + free_filter_lists(); +} + void WiresharkApplication::registerUpdate(register_action_e action, const char *message) { emit splashUpdate(action, message); diff --git a/ui/qt/wireshark_application.h b/ui/qt/wireshark_application.h index 9decb77f28..c4b4b786d2 100644 --- a/ui/qt/wireshark_application.h +++ b/ui/qt/wireshark_application.h @@ -60,6 +60,7 @@ class WiresharkApplication : public QApplication Q_OBJECT public: explicit WiresharkApplication(int &argc, char **argv); + ~WiresharkApplication(); enum AppSignal { CaptureFilterListChanged, -- cgit v1.2.3