/** * Shutdown nicely */ static void do_close (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { switch (test_step) { case TEST_STEP_1_HOP: if (NULL != peer_data[0].socket) GNUNET_STREAM_close (peer_data[0].socket); if (NULL != peer_data[1].socket) GNUNET_STREAM_close (peer_data[1].socket); if (NULL != peer2_listen_socket) GNUNET_STREAM_listen_close (peer2_listen_socket); /* Close listen socket */ break; case TEST_STEP_2_HOP: if (NULL != peer_data[1].socket) GNUNET_STREAM_close (peer_data[1].socket); if (NULL != peer_data[0].op) GNUNET_TESTBED_operation_done (peer_data[0].op); if (NULL != peer_data[1].op) GNUNET_TESTBED_operation_done (peer_data[1].op); break; case TEST_STEP_3_HOP: GNUNET_break (0); } if (GNUNET_SCHEDULER_NO_TASK != abort_task) GNUNET_SCHEDULER_cancel (abort_task); if (GNUNET_SCHEDULER_NO_TASK != write_task) GNUNET_SCHEDULER_cancel (write_task); GNUNET_SCHEDULER_shutdown (); /* Shutdown this testcase */ if (NULL != meter) { free_meter (meter); meter = NULL; } }
/** * Shutdown nicely */ static void do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_STREAM_close (peer1.socket); if (NULL != peer2.socket) GNUNET_STREAM_close (peer2.socket); if (NULL != peer2_listen_socket) GNUNET_STREAM_listen_close (peer2_listen_socket); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: shutdown\n"); if (0 != abort_task) { GNUNET_SCHEDULER_cancel (abort_task); } 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"); /* Free the duplicated configuration */ GNUNET_CONFIGURATION_destroy (config_peer1); GNUNET_CONFIGURATION_destroy (config_peer2); GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (arm_pid)); GNUNET_OS_process_destroy (arm_pid); }
/** * Shutdown nicely */ static void do_close (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { if (GNUNET_SCHEDULER_NO_TASK != abort_task) GNUNET_SCHEDULER_cancel (abort_task); if (NULL != peer1.socket) GNUNET_STREAM_close (peer1.socket); if (NULL != peer2.socket) GNUNET_STREAM_close (peer2.socket); if (NULL != peer2_listen_socket) GNUNET_STREAM_listen_close (peer2_listen_socket); /* Close listen socket */ }
/** * Adapter function called to destroy a connection to * a service. * * @param cls closure * @param op_result service handle returned from the connect adapter */ static void stream_da (void *cls, void *op_result) { if (&peer_data[1] == cls) { GNUNET_STREAM_listen_close (op_result); return; } else if (&peer_data[0] == cls) { GNUNET_STREAM_close (op_result); return; } GNUNET_assert (0); }
/** * Shutdown subsystem for non-anonymous file-sharing. */ void GSF_stream_stop () { struct StreamClient *sc; while (NULL != (sc = sc_head)) terminate_stream (sc); if (NULL != listen_socket) { GNUNET_STREAM_listen_close (listen_socket); listen_socket = NULL; } GNUNET_CONTAINER_multihashmap_iterate (stream_map, &release_streams, NULL); GNUNET_CONTAINER_multihashmap_destroy (stream_map); stream_map = NULL; }