diff --git a/mtr-introduce-grace-period.patch b/mtr-introduce-grace-period.patch new file mode 100644 index 0000000..dec245b --- /dev/null +++ b/mtr-introduce-grace-period.patch @@ -0,0 +1,74 @@ +From 6ce1601b27fdd95b44ed65d7fd83604860276d63 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Tue, 17 Sep 2013 16:11:20 +0200 +Subject: [PATCH] core: introduce grace period + +In report mode we break out from select loop immediately after we reach +maximum count of iterations. But we should wait for packets which are still on +the way. + +In order to fix the issue we introduce grace period during which we don't send +out more packets but we just wait for responses which might be still on the way. + +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1009051 +--- + select.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/select.c b/select.c +index 29088fd..31bfd5f 100644 +--- a/select.c ++++ b/select.c +@@ -45,6 +45,8 @@ static struct timeval intervaltime; + int display_offset = 0; + + ++#define GRACETIME (5 * 1000*1000) ++ + void select_loop(void) { + fd_set readfd; + fd_set writefd; +@@ -57,8 +59,12 @@ void select_loop(void) { + int NumPing = 0; + int paused = 0; + struct timeval lasttime, thistime, selecttime; ++ struct timeval startgrace; + int dt; + int rv; ++ int graceperiod = 0; ++ ++ memset(&startgrace, 0, sizeof(startgrace)); + + gettimeofday(&lasttime, NULL); + +@@ -124,10 +130,24 @@ void select_loop(void) { + (thistime.tv_sec == lasttime.tv_sec + intervaltime.tv_sec && + thistime.tv_usec >= lasttime.tv_usec + intervaltime.tv_usec)) { + lasttime = thistime; +- if(NumPing >= MaxPing && (!Interactive || ForceMaxPing)) ++ ++ if (!graceperiod) { ++ if (NumPing >= MaxPing && (!Interactive || ForceMaxPing)) { ++ graceperiod = 1; ++ startgrace = thistime; ++ } ++ ++ /* do not send out batch when we've already initiated grace period */ ++ if (!graceperiod && net_send_batch()) ++ NumPing++; ++ } ++ } ++ ++ if (graceperiod) { ++ dt = (thistime.tv_usec - startgrace.tv_usec) + ++ 1000000 * (thistime.tv_sec - startgrace.tv_sec); ++ if (dt > GRACETIME) + return; +- if (net_send_batch()) +- NumPing++; + } + + selecttime.tv_usec = (thistime.tv_usec - lasttime.tv_usec); +-- +1.8.3.1 + diff --git a/mtr.spec b/mtr.spec index 287ac43..14d26f1 100644 --- a/mtr.spec +++ b/mtr.spec @@ -19,6 +19,7 @@ Patch1: mtr-crash-in-xml-mode.patch Patch2: mtr-xml-format-fixes.patch Patch3: mtr-default-hostname.patch Patch4: mtr-ipv6-on-ipv4-only.patch +Patch5: mtr-introduce-grace-period.patch BuildRequires: ncurses-devel gtk2-devel desktop-file-utils BuildRequires: autoconf automake libtool @@ -45,6 +46,7 @@ diagnostic tool. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %build export CFLAGS="%{optflags} -fPIE" @@ -92,6 +94,7 @@ desktop-file-install \ * Tue Oct 1 2013 Michal Sekletar - 2:0.85-4 - migrate from consolehelper to policykit (#502750) - specfile cleanup +- introduce grace period (#1009051) * Sat Sep 14 2013 Michal Sekletar - 2:0.85-3 - enable hardened build