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);
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);
}
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");
}
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);
}