X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/892e136b3be07e45110a5a2db2889470386e954a..77af7e6ef6b089488af572b25e725beb3413e911:/src/msg/msg_gos.cpp diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index c9cd6f41a2..1d5ebf1271 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -3,6 +3,8 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include + #include "src/simix/smx_private.h" /* MSG_task_listen looks inside the rdv directly. Not clean. */ #include "msg_private.h" #include "mc/mc.h" @@ -502,17 +504,18 @@ int MSG_comm_testany(xbt_dynar_t comms) { int finished_index = -1; - /* create the equivalent dynar with SIMIX objects */ - xbt_dynar_t s_comms = xbt_dynar_new(sizeof(smx_synchro_t), nullptr); + /* Create the equivalent array with SIMIX objects: */ + std::vector s_comms; + s_comms.reserve(xbt_dynar_length(comms)); msg_comm_t comm; unsigned int cursor; xbt_dynar_foreach(comms, cursor, comm) { - xbt_dynar_push(s_comms, &comm->s_comm); + s_comms.push_back(comm->s_comm); } msg_error_t status = MSG_OK; try { - finished_index = simcall_comm_testany(s_comms); + finished_index = simcall_comm_testany(s_comms.data(), s_comms.size()); } catch (xbt_ex& e) { switch (e.category) { @@ -528,7 +531,6 @@ int MSG_comm_testany(xbt_dynar_t comms) throw; } } - xbt_dynar_free(&s_comms); if (finished_index != -1) { comm = xbt_dynar_get_as(comms, finished_index, msg_comm_t); @@ -625,7 +627,7 @@ int MSG_comm_waitany(xbt_dynar_t comms) msg_error_t status = MSG_OK; try { - finished_index = simcall_comm_waitany(s_comms); + finished_index = simcall_comm_waitany(s_comms, -1); } catch(xbt_ex& e) { switch (e.category) { @@ -837,7 +839,8 @@ msg_error_t MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alia int MSG_task_listen(const char *alias) { smx_mailbox_t mbox = MSG_mailbox_get_by_alias(alias); - return !MSG_mailbox_is_empty(mbox) || (mbox->permanent_receiver && !mbox->done_comm_queue->empty()); + return !MSG_mailbox_is_empty(mbox) || + (mbox->permanent_receiver && !mbox->done_comm_queue.empty()); } /** \ingroup msg_task_usage