add completion callback for overlay topology configure functions
[oweals/gnunet.git] / src / regex / gnunet-daemon-regexprofiler.c
index a542facd7e5543d823c64a9e5406e7ddfbe14060..591cda331071d1cdd8c5b58f24eee57729fbf631 100644 (file)
@@ -149,7 +149,10 @@ reannounce_regex (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   char *regex = cls;
   reannounce_task = GNUNET_SCHEDULER_NO_TASK;
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
+  {
+    GNUNET_free (regex);
     return;
+  }
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Announcing regex: %s\n", regex);
   GNUNET_STATISTICS_update (stats_handle, "# regexes announced", 1, GNUNET_NO);
@@ -169,9 +172,17 @@ reannounce_regex (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     GNUNET_assert (NULL != announce_handle);
     GNUNET_REGEX_reannounce (announce_handle);
   }
-  reannounce_task = GNUNET_SCHEDULER_add_delayed (reannounce_freq,
-                                                  &reannounce_regex,
-                                                  cls);
+
+  reannounce_task = 
+    GNUNET_SCHEDULER_add_delayed (
+      GNUNET_TIME_relative_add (reannounce_freq,
+                                GNUNET_TIME_relative_multiply (
+                                  GNUNET_TIME_UNIT_SECONDS,
+                                  GNUNET_CRYPTO_random_u32 (
+                                    GNUNET_CRYPTO_QUALITY_WEAK,
+                                    600))),
+      &reannounce_regex,
+      cls);
 }
 
 
@@ -184,6 +195,8 @@ reannounce_regex (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 static void
 announce_regex (const char * regex)
 {
+  char *copy;
+
   if (NULL == regex || 0 == strlen (regex))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot announce empty regex\n");
@@ -191,9 +204,10 @@ announce_regex (const char * regex)
   }
 
   GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == reannounce_task);
+  copy = GNUNET_strdup (regex);
   reannounce_task = GNUNET_SCHEDULER_add_delayed (announce_delay,
                                                   reannounce_regex,
-                                                  (void *) regex);
+                                                  (void *) copy);
 }