X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a146138b74c78c8e7de7294457eb0440a91a7dd9..0bc609260a603d6d396101c30ad4dd9c845e6dfd:/src/msg/msg_gos.cpp diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 770bf52a84..6fa750c748 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -6,6 +6,7 @@ #include "simgrid/Exception.hpp" #include +#include "simgrid/s4u/Comm.hpp" #include "simgrid/s4u/Mailbox.hpp" #include "src/instr/instr_private.hpp" #include "src/kernel/activity/ExecImpl.hpp" @@ -480,12 +481,12 @@ int MSG_comm_testany(xbt_dynar_t comms) int finished_index = -1; /* Create the equivalent array with SIMIX objects: */ - std::vector s_comms; + std::vector s_comms; s_comms.reserve(xbt_dynar_length(comms)); msg_comm_t comm; unsigned int cursor; xbt_dynar_foreach(comms, cursor, comm) { - s_comms.push_back(comm->s_comm); + s_comms.push_back(static_cast(comm->s_comm.get())); } msg_error_t status = MSG_OK; @@ -575,20 +576,18 @@ int MSG_comm_waitany(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_activity_t), [](void*ptr){ - intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr); - }); + /* 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) { - intrusive_ptr_add_ref(comm->s_comm.get()); - xbt_dynar_push_as(s_comms, simgrid::kernel::activity::ActivityImpl*, comm->s_comm.get()); + s_comms.push_back(static_cast(comm->s_comm.get())); } msg_error_t status = MSG_OK; try { - finished_index = simcall_comm_waitany(s_comms, -1); + finished_index = simcall_comm_waitany(s_comms.data(), s_comms.size(), -1); } catch (simgrid::TimeoutError& e) { finished_index = e.value; status = MSG_TIMEOUT; @@ -603,7 +602,6 @@ int MSG_comm_waitany(xbt_dynar_t comms) } xbt_assert(finished_index != -1, "WaitAny returned -1"); - xbt_dynar_free(&s_comms); comm = xbt_dynar_get_as(comms, finished_index, msg_comm_t); /* the communication is finished */ @@ -719,7 +717,11 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl msg_process_t process = MSG_process_self(); simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(alias); - TRACE_msg_task_put_start(task); + if (TRACE_actor_is_enabled()) { + container_t process_container = simgrid::instr::Container::by_name(instr_pid(MSG_process_self())); + std::string key = std::string("p") + std::to_string(task->counter); + simgrid::instr::Container::get_root()->get_link("ACTOR_TASK_LINK")->start_event(process_container, "SR", key); + } /* Prepare the task to send */ t_simdata = task->simdata; @@ -733,13 +735,12 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl /* Try to send it by calling SIMIX network layer */ try { - smx_activity_t comm = nullptr; /* MC needs the comm to be set to nullptr during the simix call */ - comm = simcall_comm_isend(SIMIX_process_self(), mailbox->get_impl(), t_simdata->bytes_amount, t_simdata->rate, task, - sizeof(void*), nullptr, nullptr, nullptr, nullptr, 0); + simgrid::s4u::CommPtr comm = mailbox->put_init(task, t_simdata->bytes_amount)->set_rate(t_simdata->rate); + t_simdata->comm = boost::static_pointer_cast(comm->get_impl()); + comm->start(); if (TRACE_is_enabled() && task->category != nullptr) - simgrid::simix::simcall([comm, task] { comm->set_category(task->category); }); - t_simdata->comm = boost::static_pointer_cast(comm); - simcall_comm_wait(comm, timeout); + simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); }); + comm->wait_for(timeout); } catch (simgrid::TimeoutError& e) { ret = MSG_TIMEOUT; } catch (simgrid::CancelException& e) { @@ -754,7 +755,6 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl t_simdata->setNotUsed(); } - TRACE_msg_task_put_end(); return ret; }