/** * Shutdown nicely */ static void do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: shutdown\n"); if (0 != abort_task) { GNUNET_SCHEDULER_cancel (abort_task); } if (NULL != t) { GNUNET_MESH_tunnel_destroy(t); } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: D1\n"); if (NULL != mesh_peer_1) { GNUNET_MESH_disconnect (mesh_peer_1); } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: D2\n"); if (NULL != mesh_peer_2) { GNUNET_MESH_disconnect (mesh_peer_2); } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: arm\n"); if (0 != GNUNET_OS_process_kill (arm_pid, SIGTERM)) { GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Wait\n"); GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (arm_pid)); GNUNET_OS_process_destroy (arm_pid); }
/** * Adapter function called to destroy a connection to * the MESH service. * * @param cls closure * @param op_result service handle returned from the connect adapter */ static void mesh_disconnect_adapter (void *cls, void *op_result) { struct GNUNET_MESH_Handle *mesh = op_result; struct GNUNET_MESH_TEST_AdapterContext *actx = cls; GNUNET_free (actx); GNUNET_MESH_disconnect (mesh); }
/** * Task run in monitor mode when the user presses CTRL-C to abort. * Stops monitoring activity. * * @param cls Closure (unused). * @param tc scheduler context */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { if (NULL != mh) { GNUNET_MESH_disconnect (mh); mh = NULL; } }
/** * Task run in monitor mode when the user presses CTRL-C to abort. * Stops monitoring activity. * * @param cls Closure (unused). * @param tc scheduler context */ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Shutdown\n"); if (NULL != ch) { GNUNET_MESH_channel_destroy (ch); ch = NULL; } if (NULL != mh) { GNUNET_MESH_disconnect (mh); mh = NULL; } }