Don't close the currently loaded capture file in capture_start(), do so

in its callers; when starting a capture with "wireshark -k", there's no
capture file to close, and closing it might be provoking some UI actions
that cause crashes on Windows.

Don't copy the list of selected interfaces to the list of capture
interfaces in capture_start(), either, do that in the callers; we were
already doing that in one place and, in one of the remaining cases,
namely "wireshark -k", we should do so only if no capture interfaces
were supplied on the command line.  (I.e., the set of interfaces on
which we want to capture depends on where in the UI the capture is being
started.)

svn path=/trunk/; revision=41491
This commit is contained in:
Guy Harris 2012-03-11 20:08:54 +00:00
parent 6f3ee54d62
commit 681c29c5d5
3 changed files with 21 additions and 6 deletions

View File

@ -138,13 +138,7 @@ capture_start(capture_options *capture_opts)
guint i;
GString *source = g_string_new("");
if (capture_opts->state != CAPTURE_STOPPED)
return FALSE;
capture_opts->state = CAPTURE_PREPARING;
/* close the currently loaded capture file */
cf_close(capture_opts->cf);
collect_ifaces(capture_opts);
g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_MESSAGE, "Capture Start ...");
#ifdef _WIN32
if (capture_opts->ifaces->len < 2) {
@ -654,6 +648,10 @@ capture_input_closed(capture_options *capture_opts, gchar *msg)
if (capture_opts->ifaces->len == 0) {
collect_ifaces(capture_opts);
}
/* close the currently loaded capture file */
cf_close(capture_opts->cf);
capture_start(capture_opts);
} else {
/* We're not doing a capture any more, so we don't have a save file. */

View File

@ -4126,6 +4126,17 @@ capture_start_confirmed(void)
/* XXX - we might need to init other pref data as well... */
menu_auto_scroll_live_changed(auto_scroll_live);
/* XXX - can this ever happen? */
if (global_capture_opts.state != CAPTURE_STOPPED)
return;
/* close the currently loaded capture file */
cf_close(global_capture_opts.cf);
/* Copy the selected interfaces to the set of interfaces to use for
this capture. */
collect_ifaces(&global_capture_opts);
if (capture_start(&global_capture_opts)) {
/* The capture succeeded, which means the capture filter syntax is
valid; add this capture filter to the recent capture filter list. */

View File

@ -3031,6 +3031,12 @@ main(int argc, char *argv[])
/* "-k" was specified; start a capture. */
show_main_window(TRUE);
check_and_warn_user_startup(cf_name);
/* If no user interfaces were specified on the command line,
copy the list of selected interfaces to the set of interfaces
to use for this capture. */
if (global_capture_opts.ifaces->len == 0)
collect_ifaces(&global_capture_opts);
if (capture_start(&global_capture_opts)) {
/* The capture started. Open stat windows; we do so after creating
the main window, to avoid GTK warnings, and after successfully