Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix lua compilation
[simgrid.git] / src / s4u / s4u_Exec.cpp
index 2ae3ad2..24e0111 100644 (file)
@@ -49,7 +49,6 @@ Exec* Exec::start()
     pimpl_->suspend();
 
   state_      = State::STARTED;
-  start_time_ = pimpl_->surf_action_->get_start_time();
   on_start(*this);
   return this;
 }
@@ -155,6 +154,16 @@ unsigned int Exec::get_host_number() const
   return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_host_number();
 }
 
+double Exec::get_start_time() const
+{
+  return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_start_time();
+}
+
+double Exec::get_finish_time() const
+{
+  return static_cast<kernel::activity::ExecImpl*>(pimpl_.get())->get_finish_time();
+}
+
 /** @brief Change the host on which this activity takes place.
  *
  * The activity cannot be terminated already (but it may be started). */
@@ -280,19 +289,7 @@ int sg_exec_test(sg_exec_t exec)
 
 sg_error_t sg_exec_wait(sg_exec_t exec)
 {
-  sg_error_t status = SG_OK;
-
-  simgrid::s4u::ExecPtr s4u_exec(exec, false);
-  try {
-    s4u_exec->wait_for(-1);
-  } catch (const simgrid::TimeoutException&) {
-    status = SG_ERROR_TIMEOUT;
-  } catch (const simgrid::CancelException&) {
-    status = SG_ERROR_CANCELED;
-  } catch (const simgrid::HostFailureException&) {
-    status = SG_ERROR_HOST;
-  }
-  return status;
+  return sg_exec_wait_for(exec, -1.0);
 }
 
 sg_error_t sg_exec_wait_for(sg_exec_t exec, double timeout)
@@ -303,6 +300,7 @@ sg_error_t sg_exec_wait_for(sg_exec_t exec, double timeout)
   try {
     s4u_exec->wait_for(timeout);
   } catch (const simgrid::TimeoutException&) {
+    s4u_exec->add_ref(); // the wait_for timeouted, keep the exec alive
     status = SG_ERROR_TIMEOUT;
   } catch (const simgrid::CancelException&) {
     status = SG_ERROR_CANCELED;
@@ -314,7 +312,7 @@ sg_error_t sg_exec_wait_for(sg_exec_t exec, double timeout)
 
 int sg_exec_wait_any(sg_exec_t* execs, size_t count)
 {
-  return sg_exec_wait_any_for(execs, count, -1);
+  return sg_exec_wait_any_for(execs, count, -1.0);
 }
 
 int sg_exec_wait_any_for(sg_exec_t* execs, size_t count, double timeout)