/** * Check the server statistics regularly */ static void check_statistics (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { char *stat; check_task = NULL; if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) return; GNUNET_asprintf (&stat, gettext_noop ("# advertised URI `%s' downloaded"), current_adv_uri); if (NULL != learn_peer.stats) { if (NULL != download_stats) GNUNET_STATISTICS_get_cancel (download_stats); download_stats = GNUNET_STATISTICS_get (learn_peer.stats, "hostlist", stat, GNUNET_TIME_UNIT_MINUTES, &process_downloads_done, &process_downloads, &learn_peer); if (NULL != urisrecv_stat) GNUNET_STATISTICS_get_cancel (urisrecv_stat); urisrecv_stat = GNUNET_STATISTICS_get (learn_peer.stats, "hostlist", gettext_noop ("# advertised hostlist URIs"), GNUNET_TIME_UNIT_MINUTES, &process_uris_recv_done, &process_uris_recv, &learn_peer); } GNUNET_free (stat); if (NULL != adv_peer.stats) { if (NULL != advsent_stat) GNUNET_STATISTICS_get_cancel (advsent_stat); advsent_stat = GNUNET_STATISTICS_get (adv_peer.stats, "hostlist", gettext_noop ("# hostlist advertisements send"), GNUNET_TIME_UNIT_MINUTES, &process_adv_sent_done, &process_adv_sent, NULL); } check_task = GNUNET_SCHEDULER_add_delayed (CHECK_INTERVAL, &check_statistics, NULL); }
/** * Adapter function called to destroy statistics connection * * @param cls the PeerGetStatsContext * @param op_result service handle returned from the connect adapter */ static void statistics_da (void *cls, void *op_result) { struct PeerGetStatsContext *peer_sc = cls; struct GNUNET_STATISTICS_Handle *sh = op_result; if (NULL != peer_sc->get_handle) { GNUNET_STATISTICS_get_cancel (peer_sc->get_handle); peer_sc->get_handle = NULL; } GNUNET_STATISTICS_destroy (sh, GNUNET_NO); if (NULL != peer_sc->op_done_task_id) GNUNET_SCHEDULER_cancel (peer_sc->op_done_task_id); GNUNET_free (peer_sc); }
static void shutdown_testcase () { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown testcase....\n"); if (timeout_task != NULL) { GNUNET_SCHEDULER_cancel (timeout_task); timeout_task = NULL; } if (NULL != download_stats) { GNUNET_STATISTICS_get_cancel (download_stats); download_stats = NULL; } if (NULL != urisrecv_stat) { GNUNET_STATISTICS_get_cancel (urisrecv_stat); urisrecv_stat = NULL; } if (NULL != advsent_stat) { GNUNET_STATISTICS_get_cancel (advsent_stat); advsent_stat = NULL; } if (NULL != adv_peer.stats) { GNUNET_STATISTICS_destroy (adv_peer.stats, GNUNET_NO); adv_peer.stats = NULL; } if (NULL != learn_peer.stats) { GNUNET_STATISTICS_destroy (learn_peer.stats, GNUNET_NO); learn_peer.stats = NULL; } if (check_task != NULL) { GNUNET_SCHEDULER_cancel (check_task); check_task = NULL; } if (NULL != current_adv_uri) { GNUNET_free (current_adv_uri); current_adv_uri = NULL; } if (adv_peer.th != NULL) { GNUNET_TRANSPORT_disconnect (adv_peer.th); adv_peer.th = NULL; } if (learn_peer.th != NULL) { GNUNET_TRANSPORT_disconnect (learn_peer.th); learn_peer.th = NULL; } if (adv_peer.core != NULL) { GNUNET_CORE_disconnect (adv_peer.core); adv_peer.core = NULL; } if (learn_peer.core != NULL) { GNUNET_CORE_disconnect (learn_peer.core); learn_peer.core = NULL; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Killing hostlist server ARM process.\n"); if (0 != GNUNET_OS_process_kill (adv_peer.arm_proc, GNUNET_TERM_SIG)) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); if (GNUNET_OS_process_wait (adv_peer.arm_proc) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); GNUNET_OS_process_destroy (adv_peer.arm_proc); adv_peer.arm_proc = NULL; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Killing hostlist client ARM process.\n"); if (0 != GNUNET_OS_process_kill (learn_peer.arm_proc, GNUNET_TERM_SIG)) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); if (GNUNET_OS_process_wait (learn_peer.arm_proc) != GNUNET_OK) GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "waitpid"); GNUNET_OS_process_destroy (learn_peer.arm_proc); learn_peer.arm_proc = NULL; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown complete....\n"); }