X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/778ef0bf09f58678e4cd2bad3e57cdfeb716dd45..02ac11ebb1a2b365b3c44b0745510d1e55adc4ac:/src/msg/msg_gos.cpp diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index 47a947b863..6136279e6c 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" @@ -232,14 +233,11 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d double rate) { XBT_DEBUG("MSG_task_receive_ext: Trying to receive a message on mailbox '%s'", alias); - simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(alias); msg_error_t ret = MSG_OK; /* We no longer support getting a task from a specific host */ if (host) THROW_UNIMPLEMENTED; - TRACE_msg_task_get_start(); - /* Sanity check */ xbt_assert(task, "Null pointer for the task storage"); @@ -248,9 +246,14 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d /* Try to receive it by calling SIMIX network layer */ try { - simcall_comm_recv(MSG_process_self()->get_impl(), mailbox->get_impl(), task, nullptr, nullptr, nullptr, nullptr, - timeout, rate); - XBT_DEBUG("Got task %s from %s", (*task)->name, mailbox->get_cname()); + void* payload; + simgrid::s4u::Mailbox::by_name(alias) + ->get_init() + ->set_dst_data(&payload, sizeof(msg_task_t*)) + ->set_rate(rate) + ->wait_for(timeout); + *task = static_cast(payload); + XBT_DEBUG("Got task %s from %s", (*task)->name, alias); (*task)->simdata->setNotUsed(); } catch (simgrid::HostFailureException& e) { ret = MSG_HOST_FAILURE; @@ -480,12 +483,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; @@ -576,12 +579,12 @@ int MSG_comm_waitany(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; @@ -712,31 +715,27 @@ msg_error_t MSG_task_send_bounded(msg_task_t task, const char *alias, double max msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout) { msg_error_t ret = MSG_OK; - simdata_task_t t_simdata = nullptr; - msg_process_t process = MSG_process_self(); - simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name(alias); TRACE_msg_task_put_start(task); /* Prepare the task to send */ - t_simdata = task->simdata; - t_simdata->sender = process; + simdata_task_t t_simdata = task->simdata; + t_simdata->sender = MSG_process_self(); t_simdata->source = MSG_host_self(); t_simdata->setUsed(); - t_simdata->comm = nullptr; msg_global->sent_msg++; - /* Try to send it by calling SIMIX network layer */ + /* Try to send it */ 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 = + simgrid::s4u::Mailbox::by_name(alias)->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) { @@ -751,7 +750,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; } @@ -789,14 +787,9 @@ msg_error_t MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alia */ int MSG_task_listen_from(const char *alias) { - simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::by_name(alias); - simgrid::kernel::activity::CommImplPtr comm = - boost::static_pointer_cast(mbox->front()); - - if (not comm) - return -1; + simgrid::kernel::activity::CommImplPtr comm = simgrid::s4u::Mailbox::by_name(alias)->front(); - return MSG_process_get_PID(static_cast(comm->src_buff_)->simdata->sender); + return comm ? MSG_process_get_PID(static_cast(comm->src_buff_)->simdata->sender) : -1; } /**