Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
CommWaitTransition mailbox is now valid
[simgrid.git] / src / simix / libsmx.cpp
index d27ddfcbddd276a91a5e4c83734e839ff605615e..0dd298f2b9a45de0c92f965bdf3268f2dab1461d 100644 (file)
@@ -48,15 +48,8 @@ void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size,
     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_blocking(
-        [&send_observer] {
-          return simgrid::kernel::activity::CommImpl::isend(
-              send_observer.get_issuer(), send_observer.get_mailbox(), send_observer.get_payload_size(),
-              send_observer.get_rate(), send_observer.get_src_buff(), send_observer.get_src_buff_size(),
-              send_observer.match_fun_, send_observer.clean_fun_, send_observer.copy_data_fun_,
-              send_observer.get_payload(), send_observer.is_detached());
-        },
-        &send_observer);
+    comm = simgrid::kernel::actor::simcall(
+        [&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(
@@ -110,13 +103,8 @@ void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff,
 
     simgrid::kernel::actor::CommIrecvSimcall observer{
         receiver, mbox, static_cast<unsigned char*>(dst_buff), dst_buff_size, match_fun, copy_data_fun, data, rate};
-    comm = simgrid::kernel::actor::simcall_blocking(
-        [&observer] {
-          return simgrid::kernel::activity::CommImpl::irecv(
-              observer.get_issuer(), observer.get_mailbox(), observer.get_dst_buff(), observer.get_dst_buff_size(),
-              observer.match_fun_, observer.copy_data_fun_, observer.get_payload(), observer.get_rate());
-        },
-        &observer);
+    comm = simgrid::kernel::actor::simcall(
+        [&observer] { return simgrid::kernel::activity::CommImpl::irecv(&observer); }, &observer);
 
     simgrid::kernel::actor::ActivityWaitSimcall wait_observer{receiver, comm.get(), timeout};
     if (simgrid::kernel::actor::simcall_blocking(
@@ -224,6 +212,11 @@ void simcall_run_blocking(std::function<void()> const& code, simgrid::kernel::ac
 const char* SIMIX_simcall_name(const s_smx_simcall& simcall)
 {
   if (simcall.observer_ != nullptr) {
+#if SIMGRID_HAVE_MC
+    if (mc_model_checker != nullptr) // Do not try to use the observer from the MCer
+      return "(remotely observed)";
+#endif
+
     static std::string name;
     name              = boost::core::demangle(typeid(*simcall.observer_).name());
     const char* cname = name.c_str();