#include "src/surf/network_interface.hpp"
#include "src/surf/surf_interface.hpp"
-#include <boost/range/algorithm.hpp>
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix, "SIMIX network-related synchronization");
XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t src, smx_mailbox_t mbox, double task_size,
simgrid::kernel::activity::CommImpl** comms = simcall_comm_waitany__get__comms(simcall);
size_t count = simcall_comm_waitany__get__count(simcall);
- for (size_t i = 0; i < count; i++) {
- // Remove the first occurrence of simcall:
- auto* comm = comms[i];
- auto j = boost::range::find(comm->simcalls_, simcall);
- if (j != comm->simcalls_.end())
- comm->simcalls_.erase(j);
- }
+ for (size_t i = 0; i < count; i++)
+ comms[i]->unregister_simcall(simcall);
}
void simcall_HANDLER_comm_waitany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl* comms[], size_t count,
double timeout)
{
if (MC_is_active() || MC_record_replay_is_active()) {
- if (timeout > 0.0)
- xbt_die("Timeout not implemented for waitany in the model-checker");
+ xbt_assert(timeout <= 0.0, "Timeout not implemented for waitany in the model-checker");
int idx = simcall->mc_value_;
auto* comm = comms[idx];
comm->simcalls_.push_back(simcall);
/******************************************************************************/
/* SIMIX_comm_copy_data callbacks */
/******************************************************************************/
-static void (*SIMIX_comm_copy_data_callback)(simgrid::kernel::activity::CommImpl*, void*,
- size_t) = &SIMIX_comm_copy_pointer_callback;
+void SIMIX_comm_set_copy_data_callback(void (*callback)(simgrid::kernel::activity::CommImpl*, void*, size_t))
+{
+ simgrid::kernel::activity::CommImpl::set_copy_data_callback(callback);
+}
void SIMIX_comm_copy_buffer_callback(simgrid::kernel::activity::CommImpl* comm, void* buff, size_t buff_size)
{
}
}
-void SIMIX_comm_set_copy_data_callback(void (*callback)(simgrid::kernel::activity::CommImpl*, void*, size_t))
-{
- SIMIX_comm_copy_data_callback = callback;
-}
-
void SIMIX_comm_copy_pointer_callback(simgrid::kernel::activity::CommImpl* comm, void* buff, size_t buff_size)
{
xbt_assert((buff_size == sizeof(void*)), "Cannot copy %zu bytes: must be sizeof(void*)", buff_size);
namespace kernel {
namespace activity {
+void (*CommImpl::copy_data_callback_)(CommImpl*, void*, size_t) = &SIMIX_comm_copy_pointer_callback;
+
+void CommImpl::set_copy_data_callback(void (*callback)(CommImpl*, void*, size_t))
+{
+ copy_data_callback_ = callback;
+}
+
CommImpl& CommImpl::set_size(double size)
{
size_ = size;
/* FIXME[donassolo]: getting the network_model from the origin host
* Soon we need to change this function to first get the routes and later
* create the respective surf actions */
- auto* net_model = from_->get_netpoint()->get_englobing_zone()->get_network_model();
+ auto net_model = from_->get_netpoint()->get_englobing_zone()->get_network_model();
surf_action_ = net_model->communicate(from_, to_, size_, rate_);
surf_action_->set_activity(this);
/* Copy at most dst_buff_size bytes of the message to receiver's buffer */
if (dst_buff_size_) {
- buff_size = std::min(buff_size, *(dst_buff_size_));
+ buff_size = std::min(buff_size, *dst_buff_size_);
/* Update the receiver's buffer size to the copied amount */
*dst_buff_size_ = buff_size;
if (copy_data_fun)
copy_data_fun(this, src_buff_, buff_size);
else
- SIMIX_comm_copy_data_callback(this, src_buff_, buff_size);
+ copy_data_callback_(this, src_buff_, buff_size);
}
/* Set the copied flag so we copy data only once */