Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Define SIMIX_process_on_exit() taking a std::function.
[simgrid.git] / src / simix / libsmx.cpp
index 5b479f9..41b201c 100644 (file)
@@ -33,17 +33,6 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix);
 
 #include "popping_bodies.cpp"
 
-void simcall_call(smx_actor_t actor)
-{
-  if (actor != simix_global->maestro_process) {
-    XBT_DEBUG("Yield actor '%s' on simcall %s (%d)", actor->get_cname(), SIMIX_simcall_name(actor->simcall.call),
-              (int)actor->simcall.call);
-    SIMIX_process_yield(actor);
-  } else {
-    SIMIX_simcall_handle(&actor->simcall, 0);
-  }
-}
-
 /**
  * \ingroup simix_process_management
  * \brief Creates a synchro that executes some computation of an host.
@@ -65,7 +54,7 @@ smx_activity_t simcall_execution_start(const char* name, double flops_amount, do
   xbt_assert(std::isfinite(flops_amount), "flops_amount is not finite!");
   xbt_assert(std::isfinite(priority), "priority is not finite!");
 
-  return simgrid::simix::kernelImmediate([name, flops_amount, priority, bound, host] {
+  return simgrid::simix::simcall([name, flops_amount, priority, bound, host] {
     return SIMIX_execution_start(name, flops_amount, priority, bound, host);
   });
 }
@@ -101,7 +90,7 @@ smx_activity_t simcall_execution_parallel_start(const char* name, int host_nb, s
 
   xbt_assert(std::isfinite(rate), "rate is not finite!");
 
-  return simgrid::simix::kernelImmediate([name, host_nb, host_list, flops_amount, bytes_amount, rate, timeout] {
+  return simgrid::simix::simcall([name, host_nb, host_list, flops_amount, bytes_amount, rate, timeout] {
     return SIMIX_execution_parallel_start(name, host_nb, host_list, flops_amount, bytes_amount, rate, timeout);
   });
 }
@@ -117,11 +106,9 @@ void simcall_execution_cancel(smx_activity_t execution)
 {
   simgrid::kernel::activity::ExecImplPtr exec =
       boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
-  if (exec->surfAction_ == nullptr) // FIXME: One test fails if I remove this, but I don't get why...
+  if (exec->surf_action_ == nullptr) // FIXME: One test fails if I remove this, but I don't get why...
     return;
-  simgrid::simix::kernelImmediate([exec] {
-    exec->cancel();
-  });
+  simgrid::simix::simcall([exec] { exec->cancel(); });
 }
 
 /**
@@ -136,7 +123,7 @@ void simcall_execution_set_priority(smx_activity_t execution, double priority)
 {
   /* checking for infinite values */
   xbt_assert(std::isfinite(priority), "priority is not finite!");
-  simgrid::simix::kernelImmediate([execution, priority] {
+  simgrid::simix::simcall([execution, priority] {
 
     simgrid::kernel::activity::ExecImplPtr exec =
         boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
@@ -154,7 +141,7 @@ void simcall_execution_set_priority(smx_activity_t execution, double priority)
  */
 void simcall_execution_set_bound(smx_activity_t execution, double bound)
 {
-  simgrid::simix::kernelImmediate([execution, bound] {
+  simgrid::simix::simcall([execution, bound] {
     simgrid::kernel::activity::ExecImplPtr exec =
         boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
     exec->set_bound(bound);
@@ -206,7 +193,7 @@ void simcall_process_suspend(smx_actor_t process)
  */
 void simcall_process_set_data(smx_actor_t process, void *data)
 {
-  simgrid::simix::kernelImmediate([process, data] { process->setUserData(data); });
+  simgrid::simix::simcall([process, data] { process->setUserData(data); });
 }
 
 /**
@@ -343,7 +330,7 @@ smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type,
  */
 void simcall_comm_cancel(smx_activity_t synchro)
 {
-  simgrid::simix::kernelImmediate([synchro] {
+  simgrid::simix::simcall([synchro] {
     simgrid::kernel::activity::CommImplPtr comm =
         boost::static_pointer_cast<simgrid::kernel::activity::CommImpl>(synchro);
     comm->cancel();
@@ -389,7 +376,7 @@ void simcall_set_category(smx_activity_t synchro, const char *category)
   if (category == nullptr) {
     return;
   }
-  simgrid::simix::kernelImmediate([synchro, category] { SIMIX_set_category(synchro, category); });
+  simgrid::simix::simcall([synchro, category] { SIMIX_set_category(synchro, category); });
 }
 
 /**
@@ -411,7 +398,7 @@ smx_mutex_t simcall_mutex_init()
     fprintf(stderr,"You must run MSG_init before using MSG\n"); // We can't use xbt_die since we may get there before the initialization
     xbt_abort();
   }
-  return simgrid::simix::kernelImmediate([] { return new simgrid::kernel::activity::MutexImpl(); });
+  return simgrid::simix::simcall([] { return new simgrid::kernel::activity::MutexImpl(); });
 }
 
 /**
@@ -447,7 +434,7 @@ void simcall_mutex_unlock(smx_mutex_t mutex)
  */
 smx_cond_t simcall_cond_init()
 {
-  return simgrid::simix::kernelImmediate([] { return new simgrid::kernel::activity::ConditionVariableImpl(); });
+  return simgrid::simix::simcall([] { return new simgrid::kernel::activity::ConditionVariableImpl(); });
 }
 
 /**