aboutsummaryrefslogtreecommitdiffstats
path: root/ui/cli
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-05-28 23:20:44 +0000
committerEvan Huus <eapache@gmail.com>2013-05-28 23:20:44 +0000
commitd986c63c1757844a414bb48b8a6822a9a5d107e7 (patch)
tree32229fd36c7c658cfad49d1c34e9a91cd9832424 /ui/cli
parenta9ce065e495e6d68d215df98be9e607fbe146278 (diff)
In ICMP taps, don't use g_slist_insert_sorted (which results in
n^2 time on the number of packets). Just prepend to the list, then sort it when we actually need to calculate the statistics. Should fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8721 svn path=/trunk/; revision=49606
Diffstat (limited to 'ui/cli')
-rw-r--r--ui/cli/tap-icmpstat.c7
-rw-r--r--ui/cli/tap-icmpv6stat.c7
2 files changed, 10 insertions, 4 deletions
diff --git a/ui/cli/tap-icmpstat.c b/ui/cli/tap-icmpstat.c
index a392360912..39c0c10e96 100644
--- a/ui/cli/tap-icmpstat.c
+++ b/ui/cli/tap-icmpstat.c
@@ -128,7 +128,7 @@ icmpstat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_,
if (rt == NULL)
return 0;
*rt = resp_time;
- icmpstat->rt_list = g_slist_insert_sorted(icmpstat->rt_list, rt, compare_doubles);
+ icmpstat->rt_list = g_slist_prepend(icmpstat->rt_list, rt);
icmpstat->num_resps++;
if (icmpstat->min_msecs > resp_time) {
icmpstat->min_frame = trans->resp_frame;
@@ -153,10 +153,13 @@ icmpstat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_,
*/
static void compute_stats(icmpstat_t *icmpstat, double *mean, double *med, double *sdev)
{
- GSList *slist = icmpstat->rt_list;
+ GSList *slist;
double diff;
double sq_diff_sum = 0.0;
+ icmpstat->rt_list = g_slist_sort(icmpstat->rt_list, compare_doubles);
+ slist = icmpstat->rt_list;
+
if (icmpstat->num_resps == 0 || slist == NULL) {
*mean = 0.0;
*med = 0.0;
diff --git a/ui/cli/tap-icmpv6stat.c b/ui/cli/tap-icmpv6stat.c
index 406998222e..88bb472b53 100644
--- a/ui/cli/tap-icmpv6stat.c
+++ b/ui/cli/tap-icmpv6stat.c
@@ -129,7 +129,7 @@ icmpv6stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_
if (rt == NULL)
return 0;
*rt = resp_time;
- icmpv6stat->rt_list = g_slist_insert_sorted(icmpv6stat->rt_list, rt, compare_doubles);
+ icmpv6stat->rt_list = g_slist_prepend(icmpv6stat->rt_list, rt);
icmpv6stat->num_resps++;
if (icmpv6stat->min_msecs > resp_time) {
icmpv6stat->min_frame = trans->resp_frame;
@@ -154,10 +154,13 @@ icmpv6stat_packet(void *tapdata, packet_info *pinfo _U_, epan_dissect_t *edt _U_
*/
static void compute_stats(icmpv6stat_t *icmpv6stat, double *mean, double *med, double *sdev)
{
- GSList *slist = icmpv6stat->rt_list;
+ GSList *slist;
double diff;
double sq_diff_sum = 0.0;
+ icmpv6stat->rt_list = g_slist_sort(icmpv6stat->rt_list, compare_doubles);
+ slist = icmpv6stat->rt_list;
+
if (icmpv6stat->num_resps == 0 || slist == NULL) {
*mean = 0.0;
*med = 0.0;