From: Nathan S. Evans Date: Mon, 30 Aug 2010 18:37:51 +0000 (+0000) Subject: fixing stats iteration X-Git-Tag: initial-import-from-subversion-38251~20514 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=30451a1683d71ffecc689ddab054d14b7bccc5ef;p=oweals%2Fgnunet.git fixing stats iteration --- diff --git a/src/testing/testing_group.c b/src/testing/testing_group.c index 734383b20..f0786db7d 100644 --- a/src/testing/testing_group.c +++ b/src/testing/testing_group.c @@ -348,16 +348,6 @@ struct TopologyIterateContext struct StatsIterateContext { - /** - * Handle to the statistics service. - */ - struct GNUNET_STATISTICS_Handle *stats_handle; - - /** - * Handle for getting statistics. - */ - struct GNUNET_STATISTICS_GetHandle *stats_get_handle; - /** * Continuation to call once all stats information has been retrieved. */ @@ -395,6 +385,21 @@ struct CoreContext struct GNUNET_TESTING_Daemon *daemon; }; +struct StatsCoreContext +{ + void *iter_context; + struct GNUNET_TESTING_Daemon *daemon; + /** + * Handle to the statistics service. + */ + struct GNUNET_STATISTICS_Handle *stats_handle; + + /** + * Handle for getting statistics. + */ + struct GNUNET_STATISTICS_GetHandle *stats_get_handle; +}; + /** * Handle to a group of GNUnet peers. */ @@ -2934,7 +2939,7 @@ static int internal_stats_callback (void *cls, uint64_t value, int is_persistent) { - struct CoreContext *core_context = cls; + struct StatsCoreContext *core_context = cls; struct StatsIterateContext *stats_context = (struct StatsIterateContext *)core_context->iter_context; return stats_context->proc(stats_context->cls, &core_context->daemon->id, subsystem, name, value, is_persistent); @@ -2949,7 +2954,7 @@ static int internal_stats_callback (void *cls, */ static void internal_stats_cont (void *cls, int success) { - struct CoreContext *core_context = cls; + struct StatsCoreContext *core_context = cls; struct StatsIterateContext *stats_context = (struct StatsIterateContext *)core_context->iter_context; stats_context->connected--; @@ -2958,10 +2963,12 @@ static void internal_stats_cont (void *cls, int success) if (stats_context->completed == stats_context->total) { stats_context->cont(stats_context->cls, GNUNET_YES); - if (stats_context->stats_handle != NULL) - GNUNET_STATISTICS_destroy(stats_context->stats_handle, GNUNET_NO); GNUNET_free(stats_context); } + + if (core_context->stats_handle != NULL) + GNUNET_STATISTICS_destroy(core_context->stats_handle, GNUNET_NO); + GNUNET_free(core_context); } @@ -2972,7 +2979,7 @@ static void internal_stats_cont (void *cls, int success) static void schedule_get_statistics(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { - struct CoreContext *core_context = cls; + struct StatsCoreContext *core_context = cls; struct StatsIterateContext *stats_context = (struct StatsIterateContext *)core_context->iter_context; if (tc->reason == GNUNET_SCHEDULER_REASON_SHUTDOWN) @@ -2994,16 +3001,16 @@ schedule_get_statistics(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc #endif stats_context->connected++; - stats_context->stats_handle = GNUNET_STATISTICS_create(core_context->daemon->sched, "testing", core_context->daemon->cfg); - if (stats_context->stats_handle == NULL) + core_context->stats_handle = GNUNET_STATISTICS_create(core_context->daemon->sched, "testing", core_context->daemon->cfg); + if (core_context->stats_handle == NULL) { internal_stats_cont (core_context, GNUNET_NO); return; } - stats_context->stats_get_handle = GNUNET_STATISTICS_get(stats_context->stats_handle, NULL, NULL, GNUNET_TIME_relative_get_forever(), &internal_stats_cont, &internal_stats_callback, core_context); - if (stats_context->stats_get_handle == NULL) - internal_stats_cont (core_context, GNUNET_NO); + core_context->stats_get_handle = GNUNET_STATISTICS_get(core_context->stats_handle, NULL, NULL, GNUNET_TIME_relative_get_forever(), &internal_stats_cont, &internal_stats_callback, core_context); + if (core_context->stats_get_handle == NULL) + internal_stats_cont (core_context, GNUNET_NO); } }