#include <simgrid/s4u/Engine.hpp>
#include <simgrid/s4u/Mailbox.hpp>
-#include "mc/mc.h"
#include "src/kernel/activity/CommImpl.hpp"
#include "src/kernel/actor/ActorImpl.hpp"
#include "src/kernel/actor/SimcallObserver.hpp"
+#include "src/mc/mc.h"
#include "src/mc/mc_replay.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_comm, s4u_activity, "S4U asynchronous communications");
return this;
}
-void Comm::copy_buffer_callback(kernel::activity::CommImpl* comm, void* buff, size_t buff_size)
+void Comm::copy_buffer_callback(kernel::activity::CommImpl* comm, void* buff,
+ size_t buff_size) // XBT_ATTRIB_DEPRECATED_v337
{
XBT_DEBUG("Copy the data over");
memcpy(comm->dst_buff_, buff, buff_size);
}
}
-void Comm::copy_pointer_callback(kernel::activity::CommImpl* comm, void* buff, size_t buff_size)
+void Comm::copy_pointer_callback(kernel::activity::CommImpl* comm, void* buff,
+ size_t buff_size) // XBT_ATTRIB_DEPRECATED_v337
{
xbt_assert((buff_size == sizeof(void*)), "Cannot copy %zu bytes: must be sizeof(void*)", buff_size);
*(void**)(comm->dst_buff_) = buff;
if (state_ == State::STARTING && remains_ <= 0)
XBT_DEBUG("This communication has a payload size of 0 byte. It cannot start yet");
else
- vetoable_start();
+ start();
return this;
}
if (state_ == State::STARTING && remains_ <= 0)
XBT_DEBUG("This communication has a payload size of 0 byte. It cannot start yet");
else
- vetoable_start();
+ start();
return this;
}
mailbox_ != nullptr;
}
-Comm* Comm::start()
+Comm* Comm::do_start()
{
xbt_assert(get_state() == State::INITED || get_state() == State::STARTING,
"You cannot use %s() once your communication started (not implemented)", __FUNCTION__);
xbt_assert(src_buff_ == nullptr && dst_buff_ == nullptr,
"Direct host-to-host communications cannot carry any data.");
XBT_DEBUG("host-to-host Comm. Pimpl already created and set, just start it.");
+ on_send(*this);
+ on_recv(*this);
kernel::actor::simcall_answered([this] {
pimpl_->set_state(kernel::activity::State::READY);
boost::static_pointer_cast<kernel::activity::CommImpl>(pimpl_)->start();
"You cannot use %s() once your communication is %s (not implemented)", __FUNCTION__, get_state_str());
xbt_assert(dst_buff_ == nullptr && dst_buff_size_ == 0, "You can only detach sends, not recvs");
detached_ = true;
- vetoable_start();
+ start();
return this;
}
case State::INITED:
case State::STARTING: // It's not started yet. Do it in one simcall if it's a regular communication
if (get_source() != nullptr || get_destination() != nullptr) {
- return vetoable_start()->wait_for(timeout); // In the case of host2host comm, do it in two simcalls
+ return start()->wait_for(timeout); // In the case of host2host comm, do it in two simcalls
} else if (src_buff_ != nullptr) {
on_send(*this);
send(sender_, mailbox_, remains_, rate_, src_buff_, src_buff_size_, match_fun_, copy_data_function_,