Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add test() for asynchronous executions
[simgrid.git] / src / simix / libsmx.cpp
index 6af4880..c6b6e1c 100644 (file)
@@ -55,15 +55,14 @@ void simcall_call(smx_actor_t actor)
  * \param bound
  * \return A new SIMIX execution synchronization
  */
-smx_activity_t simcall_execution_start(const char *name,
-                                    double flops_amount,
-                                    double priority, double bound)
+smx_activity_t simcall_execution_start(const char* name, double flops_amount, double priority, double bound,
+                                       simgrid::s4u::Host* host)
 {
   /* checking for infinite values */
   xbt_assert(std::isfinite(flops_amount), "flops_amount is not finite!");
   xbt_assert(std::isfinite(priority), "priority is not finite!");
 
-  return simcall_BODY_execution_start(name, flops_amount, priority, bound);
+  return simcall_BODY_execution_start(name, flops_amount, priority, bound, host);
 }
 
 /**
@@ -110,13 +109,14 @@ smx_activity_t simcall_execution_parallel_start(const char* name, int host_nb, s
  */
 void simcall_execution_cancel(smx_activity_t execution)
 {
-  simgrid::simix::kernelImmediate([execution] {
-    XBT_DEBUG("Cancel synchro %p", execution.get());
-    simgrid::kernel::activity::ExecImplPtr exec =
-        boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
-
-    if (exec->surf_exec)
-      exec->surf_exec->cancel();
+  simgrid::kernel::activity::ExecImplPtr exec =
+      boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
+  if (not exec->surfAction_)
+    return;
+  simgrid::simix::kernelImmediate([exec] {
+    XBT_DEBUG("Cancel synchro %p", exec.get());
+    if (exec->surfAction_)
+      exec->surfAction_->cancel();
   });
 }
 
@@ -136,8 +136,8 @@ void simcall_execution_set_priority(smx_activity_t execution, double priority)
 
     simgrid::kernel::activity::ExecImplPtr exec =
         boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
-    if (exec->surf_exec)
-      exec->surf_exec->setSharingWeight(priority);
+    if (exec->surfAction_)
+      exec->surfAction_->setSharingWeight(priority);
   });
 }
 
@@ -154,8 +154,8 @@ void simcall_execution_set_bound(smx_activity_t execution, double bound)
   simgrid::simix::kernelImmediate([execution, bound] {
     simgrid::kernel::activity::ExecImplPtr exec =
         boost::static_pointer_cast<simgrid::kernel::activity::ExecImpl>(execution);
-    if (exec->surf_exec)
-      static_cast<simgrid::surf::CpuAction*>(exec->surf_exec)->setBound(bound);
+    if (exec->surfAction_)
+      exec->surfAction_->setBound(bound);
   });
 }
 
@@ -170,6 +170,11 @@ e_smx_state_t simcall_execution_wait(smx_activity_t execution)
   return (e_smx_state_t) simcall_BODY_execution_wait(execution);
 }
 
+e_smx_state_t simcall_execution_test(smx_activity_t execution)
+{
+  return (e_smx_state_t)simcall_BODY_execution_test(execution);
+}
+
 /**
  * \ingroup simix_process_management
  * \brief Kills all SIMIX processes.