fix related to #4909/12605: force desirability of path if path is in use
authorChristian Grothoff <christian@grothoff.org>
Sun, 3 Dec 2017 16:16:14 +0000 (17:16 +0100)
committerChristian Grothoff <christian@grothoff.org>
Sun, 3 Dec 2017 16:16:14 +0000 (17:16 +0100)
src/cadet/gnunet-service-cadet_paths.c
src/set/gnunet-service-set_union.c
src/set/gnunet-service-set_union_strata_estimator.c

index 79eed0dccdc4d65190bd916dc209653606748836..7b90fe152d4a6f3c4ddca47e9748d0271ff6bd96 100644 (file)
@@ -179,7 +179,7 @@ GCPP_del_connection (struct CadetPeerPath *path,
        GCC_2s (cc),
        GCPP_2s (path),
        off);
-  GNUNET_assert (off < path->entries_length); /* FIXME: This assertion fails sometimes! */
+  GNUNET_assert (off < path->entries_length); /* FIXME: #4909: This assertion fails sometimes! */
   entry = path->entries[off];
   GNUNET_assert (cc == entry->cc);
   entry->cc = NULL;
@@ -428,13 +428,14 @@ extend_path (struct CadetPeerPath *path,
 
     path->entries_length = old_len + i + 1;
     recalculate_path_desirability (path);
+    if (NULL != entry->cc)
+      force = GNUNET_YES;
     path->hn = GCP_attach_path (peers[i],
                                 path,
                                 old_len + (unsigned int) i,
                                 force);
     if (NULL != path->hn)
       break;
-    GNUNET_assert (NULL == entry->cc);
     GCP_path_entry_remove (entry->peer,
                            entry,
                            old_len + i);
index b2983545f90149d03c74970661e8d574489305eb..730124495862a9a6a422c66b0ab8f917ddc4b35b 100644 (file)
@@ -739,11 +739,10 @@ get_order_from_difference (unsigned int diff)
   unsigned int ibf_order;
 
   ibf_order = 2;
-  while ( (1<<ibf_order) < (IBF_ALPHA * diff) ||
-          ((1<<ibf_order) < SE_IBF_HASH_NUM) )
+  while ( ( (1<<ibf_order) < (IBF_ALPHA * diff) ||
+            ((1<<ibf_order) < SE_IBF_HASH_NUM) ) &&
+          (ibf_order < MAX_IBF_ORDER) )
     ibf_order++;
-  if (ibf_order > MAX_IBF_ORDER)
-    ibf_order = MAX_IBF_ORDER;
   // add one for correction
   return ibf_order + 1;
 }
index e3d6bfaec702369ea089f3b6391d4ef83f51506d..0bd22c92ef9e72cbf48c053f723f2d70087f2a73 100644 (file)
@@ -228,21 +228,19 @@ unsigned int
 strata_estimator_difference (const struct StrataEstimator *se1,
                              const struct StrataEstimator *se2)
 {
-  int i;
   unsigned int count;
 
   GNUNET_assert (se1->strata_count == se2->strata_count);
   count = 0;
-  for (i = se1->strata_count - 1; i >= 0; i--)
+  for (int i = se1->strata_count - 1; i >= 0; i--)
   {
     struct InvertibleBloomFilter *diff;
     /* number of keys decoded from the ibf */
-    int ibf_count;
 
     /* FIXME: implement this without always allocating new IBFs */
     diff = ibf_dup (se1->strata[i]);
     ibf_subtract (diff, se2->strata[i]);
-    for (ibf_count = 0; GNUNET_YES; ibf_count++)
+    for (int ibf_count = 0; GNUNET_YES; ibf_count++)
     {
       int more;