From 1871fb2b0d9628707661776cfa1b35f210e5e58e Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Mon, 6 Apr 2015 12:14:25 -0700 Subject: Keep a captured-packet count in a capture_session and use that. Have the count in a cfile_t structure always reflect the actual number of packets that have been read from the file, rather than, when doing a non-update-list-of-packets-in-real-time capture, falsely increasing the count in the cfile_t to reflect the number of packets captured but not yet read. Have the status bar base its captured-packet count on the count in the capture_session structure, and base the "sorry, no packets were captured" message on the count in the capture_session structure, as we're no longer using the count in the cfile_t structure to count anything in the process of a non-update-list-of-packets-in-real-time capture. That way, we preserve the invariant that the "frames" member of a cfile_t will be non-null if the "count" member is non-zero, fixing bug 6217. It also means we can get rid of cf_set_packet_count(), as we only set the count in the capture-file-reading code. Bug: 6217 Change-Id: I72c0e2c07c30782bad777995370b7c19e1460cc2 Reviewed-on: https://code.wireshark.org/review/7950 Reviewed-by: Guy Harris --- capchild/capture_session.h | 1 + capchild/capture_sync.c | 2 ++ 2 files changed, 3 insertions(+) (limited to 'capchild') diff --git a/capchild/capture_session.h b/capchild/capture_session.h index 06cfb88902..5f3d46d842 100644 --- a/capchild/capture_session.h +++ b/capchild/capture_session.h @@ -58,6 +58,7 @@ typedef struct _capture_session { gid_t group; /**< group of the cfile */ #endif gboolean session_started; + guint32 count; /**< Total number of frames captured */ capture_options *capture_opts; /**< options for this capture */ struct _capture_file *cf; /**< handle to cfile */ } capture_session; diff --git a/capchild/capture_sync.c b/capchild/capture_sync.c index ed6ecd638d..d2c2fc51aa 100644 --- a/capchild/capture_sync.c +++ b/capchild/capture_sync.c @@ -139,6 +139,7 @@ capture_session_init(capture_session *cap_session, struct _capture_file *cf) cap_session->owner = getuid(); cap_session->group = getgid(); #endif + cap_session->count = 0; cap_session->session_started = FALSE; } @@ -1814,6 +1815,7 @@ sync_pipe_input_cb(gint source, gpointer user_data) case SP_PACKET_COUNT: npackets = atoi(buffer); g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, "sync_pipe_input_cb: new packets %u", npackets); + cap_session->count += npackets; capture_input_new_packets(cap_session, npackets); break; case SP_ERROR_MSG: -- cgit v1.2.3