X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ad468f6dad594e251b4c15e9a21b9a3c15b132df..df8e28a2d5e178c74aabcf2ab7467687186db917:/examples/msg/chord/chord.c diff --git a/examples/msg/chord/chord.c b/examples/msg/chord/chord.c index 15d3423466..9995fb6d39 100644 --- a/examples/msg/chord/chord.c +++ b/examples/msg/chord/chord.c @@ -9,9 +9,7 @@ #include "msg/msg.h" #include "xbt/log.h" #include "xbt/asserts.h" -#include "mc/modelchecker.h" -#include "mc/mc.h" -#include "xbt/xbt_os_time.h" +#include "simgrid/modelchecker.h" XBT_LOG_NEW_DEFAULT_CATEGORY(msg_chord, "Messages specific for this msg example"); @@ -82,6 +80,7 @@ static int *powers2; // utility functions static void chord_initialize(void); +static void chord_exit(void); static int normalize(int id); static int is_in_interval(int id, int start, int end); static void get_mailbox(int host_id, char* mailbox); @@ -127,6 +126,11 @@ static void chord_initialize(void) XBT_DEBUG("Sets nb_keys to %d", nb_keys); } +static void chord_exit(void) +{ + xbt_free(powers2); +} + /** * \brief Turns an id into an equivalent id in [0, nb_keys). * \param id an id @@ -139,7 +143,7 @@ static int normalize(int id) } /** - * \brief Returns whether a id belongs to the interval [start, end]. + * \brief Returns whether an id belongs to the interval [start, end]. * * The parameters are noramlized to make sure they are between 0 and nb_keys - 1). * 1 belongs to [62, 3] @@ -342,13 +346,16 @@ int node(int argc, char *argv[]) MSG_process_sleep(5); } } - else { + + if (node.comm_receive && MSG_comm_test(node.comm_receive)) { + // a transfer has occured MSG_error_t status = MSG_comm_get_status(node.comm_receive); if (status != MSG_OK) { XBT_DEBUG("Failed to receive a task. Nevermind."); + MSG_comm_destroy(node.comm_receive); node.comm_receive = NULL; } else { @@ -358,35 +365,12 @@ int node(int argc, char *argv[]) handle_task(&node, task_received); } } - - // see if some communications are finished - /* - while ((index = MSG_comm_testany(node.comms)) != -1) { - comm_send = xbt_dynar_get_as(node.comms, index, msg_comm_t); - MSG_error_t status = MSG_comm_get_status(comm_send); - xbt_dynar_remove_at(node.comms, index, &comm_send); - XBT_DEBUG("Communication %p is finished with status %d, dynar size is now %lu", - comm_send, status, xbt_dynar_length(node.comms)); - m_task_t task = MSG_comm_get_task(comm_send); - MSG_comm_destroy(comm_send); - if (status != MSG_OK) { - task_data_destroy(MSG_task_get_data(task)); - MSG_task_destroy(task); - } - } - */ } - // clean unfinished comms sent - /* unsigned int cursor; - xbt_dynar_foreach(node.comms, cursor, comm_send) { - m_task_t task = MSG_comm_get_task(comm_send); - MSG_task_cancel(task); - task_data_destroy(MSG_task_get_data(task)); - MSG_task_destroy(task); - MSG_comm_destroy(comm_send); - // FIXME: the task is actually not destroyed because MSG thinks that the other side (whose process is dead) is still using it - }*/ + if (node.comm_receive) { + MSG_comm_destroy(node.comm_receive); + node.comm_receive = NULL; + } // leave the ring leave(&node); @@ -890,14 +874,13 @@ static void random_lookup(node_t node) */ int main(int argc, char *argv[]) { + MSG_global_init(&argc, argv); if (argc < 3) { printf("Usage: %s [-nb_bits=n] [-timeout=t] platform_file deployment_file\n", argv[0]); printf("example: %s ../msg_platform.xml chord.xml\n", argv[0]); exit(1); } - MSG_global_init(&argc, argv); - char **options = &argv[1]; while (!strncmp(options[0], "-", 1)) { @@ -925,7 +908,6 @@ int main(int argc, char *argv[]) chord_initialize(); - MSG_set_channel_number(0); MSG_create_environment(platform_file); MSG_function_register("node", node); @@ -936,6 +918,7 @@ int main(int argc, char *argv[]) XBT_INFO("Simulated time: %g", MSG_get_clock()); MSG_clean(); + chord_exit(); if (res == MSG_OK) return 0;