diff options
author | Evan Huus <eapache@gmail.com> | 2013-05-28 23:20:44 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-05-28 23:20:44 +0000 |
commit | d986c63c1757844a414bb48b8a6822a9a5d107e7 (patch) | |
tree | 32229fd36c7c658cfad49d1c34e9a91cd9832424 /ui/cli | |
parent | a9ce065e495e6d68d215df98be9e607fbe146278 (diff) | |
download | wireshark-d986c63c1757844a414bb48b8a6822a9a5d107e7.tar.gz wireshark-d986c63c1757844a414bb48b8a6822a9a5d107e7.tar.bz2 wireshark-d986c63c1757844a414bb48b8a6822a9a5d107e7.zip |
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.c | 7 | ||||
-rw-r--r-- | ui/cli/tap-icmpv6stat.c | 7 |
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; |