Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Kill Simcall::COMM_RECV, COMM_IRECV, COMM_SEND and COMM_ISEND
[simgrid.git] / src / simix / libsmx.cpp
index 9914b02..87d1465 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(
@@ -69,8 +62,13 @@ void simcall_comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size,
     comm = nullptr;
   }
   else {
-    simcall_BODY_comm_send(sender, mbox, task_size, rate, static_cast<unsigned char*>(src_buff), src_buff_size,
-                           match_fun, copy_data_fun, data, timeout);
+    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);
+    });
   }
 }
 
@@ -89,8 +87,10 @@ simcall_comm_isend(smx_actor_t sender, smx_mailbox_t mbox, double task_size, dou
 
   xbt_assert(mbox, "No rendez-vous point defined for isend");
 
-  return simcall_BODY_comm_isend(sender, mbox, task_size, rate, static_cast<unsigned char*>(src_buff), src_buff_size,
-                                 match_fun, clean_fun, copy_data_fun, data, detached);
+  simgrid::kernel::actor::CommIsendSimcall observer(sender, mbox, task_size, rate,
+                                                    static_cast<unsigned char*>(src_buff), src_buff_size, match_fun,
+                                                    clean_fun, copy_data_fun, data, detached);
+  return simgrid::kernel::actor::simcall([&observer] { return simgrid::kernel::activity::CommImpl::isend(&observer); });
 }
 
 /**
@@ -110,13 +110,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(
@@ -129,8 +124,12 @@ void simcall_comm_recv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff,
     comm = nullptr;
   }
   else {
-    simcall_BODY_comm_recv(receiver, mbox, static_cast<unsigned char*>(dst_buff), dst_buff_size, match_fun,
-                           copy_data_fun, data, timeout, rate);
+    simgrid::kernel::actor::CommIrecvSimcall observer(receiver, mbox, static_cast<unsigned char*>(dst_buff),
+                                                      dst_buff_size, match_fun, copy_data_fun, data, rate);
+    simgrid::kernel::actor::simcall_blocking([&observer, timeout] {
+      simgrid::kernel::activity::ActivityImplPtr comm = simgrid::kernel::activity::CommImpl::irecv(&observer);
+      comm->wait_for(observer.get_issuer(), timeout);
+    });
   }
 }
 /**
@@ -143,8 +142,9 @@ simcall_comm_irecv(smx_actor_t receiver, smx_mailbox_t mbox, void* dst_buff, siz
 {
   xbt_assert(mbox, "No rendez-vous point defined for irecv");
 
-  return simcall_BODY_comm_irecv(receiver, mbox, static_cast<unsigned char*>(dst_buff), dst_buff_size, match_fun,
-                                 copy_data_fun, data, rate);
+  simgrid::kernel::actor::CommIrecvSimcall observer(receiver, mbox, static_cast<unsigned char*>(dst_buff),
+                                                    dst_buff_size, match_fun, copy_data_fun, data, rate);
+  return simgrid::kernel::actor::simcall([&observer] { return simgrid::kernel::activity::CommImpl::irecv(&observer); });
 }
 
 /**
@@ -236,7 +236,7 @@ const char* SIMIX_simcall_name(const s_smx_simcall& simcall)
       cname += 17; // strip prefix "simgrid::kernel::"
     return cname;
   } else {
-    return simcall_names[static_cast<int>(simcall.call_)];
+    return simcall_names.at(static_cast<int>(simcall.call_));
   }
 }