-
- if (MC_is_active() || MC_record_replay_is_active()) {
- /* the model-checker wants two separate simcalls, and wants comm to be nullptr during the simcall */
- simgrid::kernel::activity::ActivityImplPtr comm = nullptr;
-
- simgrid::kernel::actor::CommIsendSimcall send_observer{
- sender, mbox, task_size, rate, static_cast<unsigned char*>(src_buff), src_buff_size, match_fun,
- nullptr, copy_data_fun, data, false};
- comm = simgrid::kernel::actor::simcall_answered(
- [&send_observer] { return simgrid::kernel::activity::CommImpl::isend(&send_observer); }, &send_observer);
-
- simgrid::kernel::actor::ActivityWaitSimcall wait_observer{sender, comm.get(), timeout};
- if (simgrid::kernel::actor::simcall_blocking(
- [&wait_observer] {
- wait_observer.get_activity()->wait_for(wait_observer.get_issuer(), wait_observer.get_timeout());
- },
- &wait_observer)) {
- throw simgrid::TimeoutException(XBT_THROW_POINT, "Timeouted");
- }
- comm = nullptr;
- }
- else {
- simgrid::kernel::actor::CommIsendSimcall observer(sender, mbox, task_size, rate,
- static_cast<unsigned char*>(src_buff), src_buff_size, match_fun,
- nullptr, copy_data_fun, data, false);
- simgrid::kernel::actor::simcall_blocking([&observer, timeout] {
- simgrid::kernel::activity::ActivityImplPtr comm = simgrid::kernel::activity::CommImpl::isend(&observer);
- comm->wait_for(observer.get_issuer(), timeout);
- });
- }
+ simgrid::s4u::Comm::send(sender, mbox->get_iface(), task_size, rate, src_buff, src_buff_size, match_fun,
+ copy_data_fun, data, timeout);