} else if (src_buff_ != nullptr) { // Sender side
on_send(*this);
- pimpl_ = simcall_comm_isend(sender_, mailbox_->get_impl(), remains_, rate_, src_buff_, src_buff_size_, match_fun_,
- clean_fun_, copy_data_function_, get_data<void>(), detached_);
+ kernel::actor::CommIsendSimcall observer{sender_,
+ mailbox_->get_impl(),
+ remains_,
+ rate_,
+ static_cast<unsigned char*>(src_buff_),
+ src_buff_size_,
+ match_fun_,
+ clean_fun_,
+ copy_data_function_,
+ get_data<void>(),
+ detached_};
+ pimpl_ = kernel::actor::simcall([&observer] { return kernel::activity::CommImpl::isend(&observer); }, &observer);
} else if (dst_buff_ != nullptr) { // Receiver side
xbt_assert(not detached_, "Receive cannot be detached");
on_recv(*this);
- pimpl_ = simcall_comm_irecv(receiver_, mailbox_->get_impl(), dst_buff_, &dst_buff_size_, match_fun_,
- copy_data_function_, get_data<void>(), rate_);
+ kernel::actor::CommIrecvSimcall observer{receiver_,
+ mailbox_->get_impl(),
+ static_cast<unsigned char*>(dst_buff_),
+ &dst_buff_size_,
+ match_fun_,
+ copy_data_function_,
+ get_data<void>(),
+ rate_};
+ pimpl_ = kernel::actor::simcall([&observer] { return kernel::activity::CommImpl::irecv(&observer); }, &observer);
} else {
xbt_die("Cannot start a communication before specifying whether we are the sender or the receiver");
}