From 2f77efce7da0a079c38609e7bd24cc69937863b1 Mon Sep 17 00:00:00 2001 From: Jeff Morriss Date: Wed, 22 Aug 2007 16:30:16 +0000 Subject: Fix bug http://bugs.wireshark.org/bugzilla/show_bug.cgi?id=1757 : Try to call get_interface_descriptive_name() as little as possible (storing the result in capture_opts) to avoid a performance hit during live capture (especially if you have lots of interfaces) and to avoid leaking memory. One issue with this is that capture_opts.c cannot (without adding significant dependencies) set the iface_descr so readers of that field (only gtk/main.c and tshark.c) use a macro to (set if not already set and) get the value of that field. svn path=/trunk/; revision=22587 --- capture_opts.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'capture_opts.c') diff --git a/capture_opts.c b/capture_opts.c index c3ecd6a20a..df2c8063b5 100644 --- a/capture_opts.c +++ b/capture_opts.c @@ -86,6 +86,7 @@ capture_opts_init(capture_options *capture_opts, void *cfile) capture_opts->cf = cfile; capture_opts->cfilter = g_strdup(""); /* No capture filter string specified */ capture_opts->iface = NULL; /* Default is "pick the first interface" */ + capture_opts->iface_descr = NULL; #ifdef _WIN32 capture_opts->buffer_size = 1; /* 1 MB */ #endif @@ -133,6 +134,7 @@ capture_opts_log(const char *log_domain, GLogLevelFlags log_level, capture_optio g_log(log_domain, log_level, "CFile : 0x%p", capture_opts->cf); g_log(log_domain, log_level, "Filter : %s", capture_opts->cfilter); g_log(log_domain, log_level, "Interface : %s", capture_opts->iface); + g_log(log_domain, log_level, "Interface Descr : %s", capture_opts->iface_descr); #ifdef _WIN32 g_log(log_domain, log_level, "BufferSize : %u (MB)", capture_opts->buffer_size); #endif @@ -317,6 +319,10 @@ capture_opts_add_iface_opt(capture_options *capture_opts, const char *optarg) return 1; } capture_opts->iface = g_strdup(if_info->name); + /* We don't set iface_descr here because doing so requires + * capture_ui_utils.c which requires epan/prefs.c which is + * probably a bit too much dependency for here... + */ free_interface_list(if_list); } else { capture_opts->iface = g_strdup(optarg); @@ -686,6 +692,10 @@ gboolean capture_opts_trim_iface(capture_options *capture_opts, const char *capt if (capture_device != NULL) { /* Yes - use it. */ capture_opts->iface = g_strdup(capture_device); + /* We don't set iface_descr here because doing so requires + * capture_ui_utils.c which requires epan/prefs.c which is + * probably a bit too much dependency for here... + */ } else { /* No - pick the first one from the list of interfaces. */ if_list = get_interface_list(&err, &err_str); @@ -705,6 +715,10 @@ gboolean capture_opts_trim_iface(capture_options *capture_opts, const char *capt } if_info = if_list->data; /* first interface */ capture_opts->iface = g_strdup(if_info->name); + /* We don't set iface_descr here because doing so requires + * capture_ui_utils.c which requires epan/prefs.c which is + * probably a bit too much dependency for here... + */ free_interface_list(if_list); } } -- cgit v1.2.3