Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
The checker now have a reference to the session
[simgrid.git] / src / mc / checker / SafetyChecker.cpp
index 0feca33fc7a6c434060ed7e00f351e00105d0a92..cefde1f7702d7f9f2c463c82b5ef5a8eb6a9b304 100644 (file)
@@ -40,8 +40,7 @@ void SafetyChecker::check_non_termination(const State* current_state)
       XBT_INFO("*** NON-PROGRESSIVE CYCLE DETECTED ***");
       XBT_INFO("******************************************");
       XBT_INFO("Counter-example execution trace:");
-      auto checker = api::get().mc_get_checker();
-      for (auto const& s : checker->get_textual_trace())
+      for (auto const& s : get_textual_trace())
         XBT_INFO("  %s", s.c_str());
       api::get().dump_record_path();
       api::get().log_state();
@@ -187,9 +186,6 @@ void SafetyChecker::backtrack()
     if (reductionMode_ == ReductionMode::dpor) {
       auto call = state->executed_req_.call_;
       const kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_);
-      if (call == simix::Simcall::MUTEX_LOCK || call == simix::Simcall::MUTEX_TRYLOCK)
-        xbt_die("Mutex is currently not supported with DPOR,  use --cfg=model-check/reduction:none");
-
       for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) {
         State* prev_state = i->get();
         if (state->executed_req_.issuer_ == prev_state->executed_req_.issuer_) {
@@ -257,7 +253,7 @@ void SafetyChecker::restore_state()
   }
 }
 
-SafetyChecker::SafetyChecker() : Checker()
+SafetyChecker::SafetyChecker(Session* session) : Checker(session)
 {
   reductionMode_ = reduction_mode;
   if (_sg_mc_termination)
@@ -294,9 +290,9 @@ SafetyChecker::SafetyChecker() : Checker()
   stack_.push_back(std::move(initial_state));
 }
 
-Checker* createSafetyChecker()
+Checker* createSafetyChecker(Session* session)
 {
-  return new SafetyChecker();
+  return new SafetyChecker(session);
 }
 
 } // namespace mc