gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet] 02/02: Fixed bug in resend logic for fragments, especially for


From: gnunet
Subject: [gnunet] 02/02: Fixed bug in resend logic for fragments, especially for DV boxes.
Date: Thu, 25 Jan 2024 09:32:39 +0100

This is an automated email from the git hooks/post-receive script.

t3sserakt pushed a commit to branch master
in repository gnunet.

commit 94caa7dae192871e512d7162010779936abfc26a
Author: t3sserakt <t3ss@posteo.de>
AuthorDate: Thu Jan 25 09:07:50 2024 +0100

    Fixed bug in resend logic for fragments, especially for DV boxes.
---
 src/service/transport/gnunet-service-transport.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/service/transport/gnunet-service-transport.c 
b/src/service/transport/gnunet-service-transport.c
index bc7364838..f37abaae0 100644
--- a/src/service/transport/gnunet-service-transport.c
+++ b/src/service/transport/gnunet-service-transport.c
@@ -9910,17 +9910,20 @@ static unsigned int
 check_next_attempt_tree (struct PendingMessage *pm)
 {
   struct PendingMessage *pos;
+  enum GNUNET_GenericReturnValue frags_in_flight_round;
 
   pos = pm->head_frag;
   while (NULL != pos)
   {
-    if (pos->frags_in_flight_round != pm->frags_in_flight_round ||
+    if (pos->frags_in_flight_round == pm->frags_in_flight_round ||
         GNUNET_YES == check_next_attempt_tree (pos))
-      return GNUNET_YES;
+      frags_in_flight_round = GNUNET_NO;
+    else
+      frags_in_flight_round = GNUNET_YES;
     pos = pos->next_frag;
   }
 
-  return GNUNET_NO;
+  return frags_in_flight_round;
 }
 
 
@@ -9965,9 +9968,14 @@ update_pm_next_attempt (struct PendingMessage *pm,
     while (NULL != root->frag_parent && PMT_DV_BOX != root->pmt)
       root = root->frag_parent;
 
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "frag_count %u\n",
+                root->frag_count);
+
     if (GNUNET_NO == root->frags_in_flight)
     {
       root->next_attempt = next_attempt;
+      root->frags_in_flight_round++;
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                   "Next attempt for fragmented message <%" PRIu64 "> (<%" 
PRIu64
                   ">)set to %" PRIu64 "\n",
@@ -9991,6 +9999,8 @@ update_pm_next_attempt (struct PendingMessage *pm,
                   ", reorder root! Next attempt is %" PRIu64 "\n",
                   root->logging_uuid,
                   root->next_attempt.abs_value_us);
+      if (PMT_DV_BOX == root->pmt)
+        root = root->frag_parent;
       reorder_root_pm (root, root->next_attempt);
       root->frag_count = 0;
       root->next_attempt = GNUNET_TIME_UNIT_ZERO_ABS;
@@ -10005,6 +10015,10 @@ update_pm_next_attempt (struct PendingMessage *pm,
         GNUNET_TIME_absolute_get_remaining (root->next_attempt);
       struct GNUNET_TIME_Relative plus = GNUNET_TIME_absolute_get_remaining (
         next_attempt);
+
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "frag_count %u after factor\n",
+                root->frag_count);
       s1 = GNUNET_TIME_relative_multiply_double (plus_mean,
                                           factor);
       s2 = GNUNET_TIME_relative_divide (plus,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]