/* 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 <xbt/ex.hpp>
+
#include "src/simix/smx_private.h" /* MSG_task_listen looks inside the rdv directly. Not clean. */
#include "msg_private.h"
#include "mc/mc.h"
{
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<simgrid::simix::Synchro*> 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) {
throw;
}
}
- xbt_dynar_free(&s_comms);
if (finished_index != -1) {
comm = xbt_dynar_get_as(comms, finished_index, msg_comm_t);
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) {
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