]> AND Public Git Repository - simgrid.git/blobdiff - src/kernel/activity/SynchroRaw.cpp
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
back to normal ... keep progressing towards modern simcalls for all
[simgrid.git] / src / kernel / activity / SynchroRaw.cpp
index 4f50b7f7fc9ca1461871bb8a344aa210fdc2c444..60d8f806f79afe9286b49a3508d81adbdccc38b6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -12,7 +12,8 @@
 #include "src/kernel/resource/CpuImpl.hpp"
 #include "src/simix/popping_private.hpp"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_synchro, simix, "SIMIX Synchronization (mutex, semaphores and conditions)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_synchro, kernel,
+                                "Kernel synchronization mechanisms (mutex, semaphores and conditions)");
 
 namespace simgrid {
 namespace kernel {
@@ -54,31 +55,34 @@ void RawImpl::cancel()
 
 void RawImpl::post()
 {
-  if (surf_action_->get_state() == resource::Action::State::FAILED) {
-    state_ = State::FAILED;
-  } else if (surf_action_->get_state() == resource::Action::State::FINISHED) {
-    state_ = State::SRC_TIMEOUT;
-  }
+  if (surf_action_->get_state() == resource::Action::State::FAILED)
+    set_state(State::FAILED);
+  else if (surf_action_->get_state() == resource::Action::State::FINISHED)
+    set_state(State::SRC_TIMEOUT);
 
   clean_action();
   /* Answer all simcalls associated with the synchro */
   finish();
 }
+void RawImpl::set_exception(actor::ActorImpl* issuer)
+{
+  if (get_state() == State::FAILED) {
+    issuer->context_->set_wannadie();
+    issuer->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed"));
+  } else {
+    xbt_assert(get_state() == State::SRC_TIMEOUT, "Internal error in RawImpl::finish() unexpected synchro state %s",
+               get_state_str());
+  }
+}
 
 void RawImpl::finish()
 {
-  XBT_DEBUG("RawImpl::finish() in state %s", to_c_str(state_));
+  XBT_DEBUG("RawImpl::finish() in state %s", get_state_str());
   xbt_assert(simcalls_.size() == 1, "Unexpected number of simcalls waiting: %zu", simcalls_.size());
   smx_simcall_t simcall = simcalls_.front();
   simcalls_.pop_front();
 
-  if (state_ == State::FAILED) {
-    simcall->issuer_->context_->set_wannadie();
-    simcall->issuer_->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed"));
-  } else {
-    xbt_assert(state_ == State::SRC_TIMEOUT, "Internal error in RawImpl::finish() unexpected synchro state %s",
-               to_c_str(state_));
-  }
+  set_exception(simcall->issuer_);
 
   finish_callback_();
   simcall->issuer_->waiting_synchro_ = nullptr;