From 9af949a9275d971a6fa1c8a4e1af721135304863 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 8 May 2012 18:06:26 +0000 Subject: [PATCH] -fix: min delay 50ms, do not skip mindelay if fragmentation block only consists of 1 msg --- src/fragmentation/fragmentation.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/fragmentation/fragmentation.c b/src/fragmentation/fragmentation.c index 8fab3fee4..1cc28bf38 100644 --- a/src/fragmentation/fragmentation.c +++ b/src/fragmentation/fragmentation.c @@ -28,6 +28,9 @@ #include "fragmentation.h" +#define MIN_ACK_DELAY GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 50) + + /** * Fragmentation context. */ @@ -172,6 +175,11 @@ transmit_next (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) } fc->next_transmission = (fc->next_transmission + 1) % 64; wrap |= (fc->next_transmission == 0); + while (0 == (fc->acks & (1LL << fc->next_transmission))) + { + fc->next_transmission = (fc->next_transmission + 1) % 64; + wrap |= (fc->next_transmission == 0); + } /* assemble fragmentation message */ mbuf = (const char *) &fc[1]; @@ -211,7 +219,7 @@ transmit_next (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_TIME_relative_multiply (fc->delay, fc->num_rounds)); /* never use zero, need some time for ACK always */ - delay = GNUNET_TIME_relative_max (GNUNET_TIME_UNIT_MILLISECONDS, delay); + delay = GNUNET_TIME_relative_max (MIN_ACK_DELAY, delay); fc->last_round = GNUNET_TIME_absolute_get (); fc->wack = GNUNET_YES; } -- 2.25.1