Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
No need to answer to simcall when host is off.
[simgrid.git] / src / simix / smx_synchro.cpp
index b560ccd..7fd7af1 100644 (file)
@@ -20,8 +20,8 @@ smx_activity_t SIMIX_synchro_wait(sg_host_t smx_host, double timeout)
 
   simgrid::kernel::activity::RawImplPtr sync =
       simgrid::kernel::activity::RawImplPtr(new simgrid::kernel::activity::RawImpl());
-  sync->sleep                          = smx_host->pimpl_cpu->sleep(timeout);
-  sync->sleep->set_data(sync.get());
+  sync->surf_action_ = smx_host->pimpl_cpu->sleep(timeout);
+  sync->surf_action_->set_data(sync.get());
   XBT_OUT();
   return sync;
 }
@@ -65,16 +65,15 @@ void SIMIX_synchro_finish(smx_activity_t synchro)
   smx_simcall_t simcall = synchro->simcalls_.front();
   synchro->simcalls_.pop_front();
 
-  if (synchro->state_ != SIMIX_SRC_TIMEOUT) {
-    if (synchro->state_ == SIMIX_FAILED)
-      simcall->issuer->context_->iwannadie = 1;
-    else
-      THROW_IMPOSSIBLE;
-  }
-
   SIMIX_synchro_stop_waiting(simcall->issuer, simcall);
   simcall->issuer->waiting_synchro = nullptr;
-  SIMIX_simcall_answer(simcall);
+
+  if (synchro->state_ != SIMIX_SRC_TIMEOUT) {
+    xbt_assert(synchro->state_ == SIMIX_FAILED);
+    simcall->issuer->context_->iwannadie = true;
+  } else {
+    SIMIX_simcall_answer(simcall);
+  }
   XBT_OUT();
 }
 
@@ -89,18 +88,6 @@ smx_sem_t SIMIX_sem_init(unsigned int value)
   return sem;
 }
 
-/** @brief Destroys a semaphore */
-void SIMIX_sem_destroy(smx_sem_t sem)
-{
-  XBT_IN("(%p)",sem);
-  XBT_DEBUG("Destroy semaphore %p", sem);
-  if (sem != nullptr) {
-    xbt_assert(sem->sleeping.empty(), "Cannot destroy semaphore since someone is still using it");
-    delete sem;
-  }
-  XBT_OUT();
-}
-
 /** @brief release the semaphore
  *
  * Unlock a process waiting on the semaphore.