X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/149c63f36e15b8500b1e826bda5138318ff7ba2b..92ecb26f1bc9a12739d2c04b732099c1b23bc7ac:/src/kernel/activity/CommImpl.cpp diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index b80dc64481..914ce4f1cf 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -24,13 +24,13 @@ XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t sr void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout) { - smx_activity_t comm = simcall_HANDLER_comm_isend(simcall, src, mbox, task_size, rate, src_buff, src_buff_size, - match_fun, nullptr, copy_data_fun, data, 0); + simgrid::kernel::activity::ActivityImplPtr comm = simcall_HANDLER_comm_isend( + simcall, src, mbox, task_size, rate, src_buff, src_buff_size, match_fun, nullptr, copy_data_fun, data, false); SIMCALL_SET_MC_VALUE(*simcall, 0); simcall_HANDLER_comm_wait(simcall, static_cast(comm.get()), timeout); } -XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend( +XBT_PRIVATE simgrid::kernel::activity::ActivityImplPtr simcall_HANDLER_comm_isend( smx_simcall_t /*simcall*/, smx_actor_t src_proc, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), @@ -41,8 +41,7 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend( XBT_DEBUG("send from mailbox %p", mbox); /* Prepare a synchro describing us, so that it gets passed to the user-provided filter of other side */ - simgrid::kernel::activity::CommImplPtr this_comm = - simgrid::kernel::activity::CommImplPtr(new simgrid::kernel::activity::CommImpl()); + simgrid::kernel::activity::CommImplPtr this_comm(new simgrid::kernel::activity::CommImpl()); this_comm->set_type(simgrid::kernel::activity::CommImpl::Type::SEND); /* Look for communication synchro matching our needs. We also provide a description of @@ -78,7 +77,7 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend( other_comm->clean_fun = clean_fun; } else { other_comm->clean_fun = nullptr; - src_proc->comms.push_back(other_comm); + src_proc->activities_.emplace_back(other_comm); } /* Setup the communication synchro */ @@ -103,19 +102,19 @@ XBT_PRIVATE void simcall_HANDLER_comm_recv(smx_simcall_t simcall, smx_actor_t re void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double timeout, double rate) { - smx_activity_t comm = simcall_HANDLER_comm_irecv(simcall, receiver, mbox, dst_buff, dst_buff_size, match_fun, - copy_data_fun, data, rate); + simgrid::kernel::activity::ActivityImplPtr comm = simcall_HANDLER_comm_irecv( + simcall, receiver, mbox, dst_buff, dst_buff_size, match_fun, copy_data_fun, data, rate); SIMCALL_SET_MC_VALUE(*simcall, 0); simcall_HANDLER_comm_wait(simcall, static_cast(comm.get()), timeout); } -XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_irecv( - smx_simcall_t /*simcall*/, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, size_t* dst_buff_size, - bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), - void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, double rate) +XBT_PRIVATE simgrid::kernel::activity::ActivityImplPtr +simcall_HANDLER_comm_irecv(smx_simcall_t /*simcall*/, smx_actor_t receiver, smx_mailbox_t mbox, unsigned char* dst_buff, + size_t* dst_buff_size, bool (*match_fun)(void*, void*, simgrid::kernel::activity::CommImpl*), + void (*copy_data_fun)(simgrid::kernel::activity::CommImpl*, void*, size_t), void* data, + double rate) { - simgrid::kernel::activity::CommImplPtr this_synchro = - simgrid::kernel::activity::CommImplPtr(new simgrid::kernel::activity::CommImpl()); + simgrid::kernel::activity::CommImplPtr this_synchro(new simgrid::kernel::activity::CommImpl()); this_synchro->set_type(simgrid::kernel::activity::CommImpl::Type::RECEIVE); XBT_DEBUG("recv from mbox %p. this_synchro=%p", mbox, this_synchro.get()); @@ -161,7 +160,7 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_irecv( other_comm->state_ = simgrid::kernel::activity::State::READY; other_comm->set_type(simgrid::kernel::activity::CommImpl::Type::READY); } - receiver->comms.push_back(other_comm); + receiver->activities_.emplace_back(other_comm); } /* Setup communication synchro */ @@ -310,9 +309,10 @@ void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, simgrid::kernel::activi } if (timeout < 0.0) { - simcall->timeout_cb_ = NULL; + simcall->timeout_cb_ = nullptr; } else { simcall->timeout_cb_ = simgrid::simix::Timer::set(SIMIX_get_clock() + timeout, [simcall]() { + simcall->timeout_cb_ = nullptr; SIMIX_waitany_remove_simcall_from_actions(simcall); simcall_comm_waitany__set__result(simcall, -1); simcall->issuer_->simcall_answer(); @@ -480,12 +480,12 @@ void CommImpl::copy_data() dst_actor_ ? dst_actor_->get_host()->get_cname() : "a finished process", dst_buff_, buff_size); /* Copy at most dst_buff_size bytes of the message to receiver's buffer */ - if (dst_buff_size_) + if (dst_buff_size_) { buff_size = std::min(buff_size, *(dst_buff_size_)); - /* Update the receiver's buffer size to the copied amount */ - if (dst_buff_size_) + /* Update the receiver's buffer size to the copied amount */ *dst_buff_size_ = buff_size; + } if (buff_size > 0) { if (copy_data_fun) @@ -581,9 +581,9 @@ void CommImpl::finish() * list. Afterwards, get the position of the actual synchro in the waitany list and return it as the result of the * simcall */ - if (simcall->call_ == SIMCALL_NONE) // FIXME: maybe a better way to handle this case - continue; // if actor handling comm is killed - if (simcall->call_ == SIMCALL_COMM_WAITANY) { + if (simcall->call_ == simix::Simcall::NONE) // FIXME: maybe a better way to handle this case + continue; // if actor handling comm is killed + if (simcall->call_ == simix::Simcall::COMM_WAITANY) { SIMIX_waitany_remove_simcall_from_actions(simcall); if (simcall->timeout_cb_) { simcall->timeout_cb_->remove(); @@ -674,15 +674,15 @@ void CommImpl::finish() } /* if there is an exception during a waitany or a testany, indicate the position of the failed communication */ if (simcall->issuer_->exception_ && - (simcall->call_ == SIMCALL_COMM_WAITANY || simcall->call_ == SIMCALL_COMM_TESTANY)) { + (simcall->call_ == simix::Simcall::COMM_WAITANY || simcall->call_ == simix::Simcall::COMM_TESTANY)) { // First retrieve the rank of our failing synchro CommImpl** comms; size_t count; - if (simcall->call_ == SIMCALL_COMM_WAITANY) { + if (simcall->call_ == simix::Simcall::COMM_WAITANY) { comms = simcall_comm_waitany__get__comms(simcall); count = simcall_comm_waitany__get__count(simcall); } else { - /* simcall->call_ == SIMCALL_COMM_TESTANY */ + /* simcall->call_ == simix::Simcall::COMM_TESTANY */ comms = simcall_comm_testany__get__comms(simcall); count = simcall_comm_testany__get__count(simcall); } @@ -697,18 +697,18 @@ void CommImpl::finish() } } - simcall->issuer_->waiting_synchro = nullptr; - simcall->issuer_->comms.remove(this); + simcall->issuer_->waiting_synchro_ = nullptr; + simcall->issuer_->activities_.remove(this); if (detached_) { if (simcall->issuer_ == src_actor_) { if (dst_actor_) - dst_actor_->comms.remove(this); + dst_actor_->activities_.remove(this); } else if (simcall->issuer_ == dst_actor_) { if (src_actor_) - src_actor_->comms.remove(this); + src_actor_->activities_.remove(this); } else { - dst_actor_->comms.remove(this); - src_actor_->comms.remove(this); + dst_actor_->activities_.remove(this); + src_actor_->activities_.remove(this); } } }