X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8d7c1a3029ff92f8f7d59570856f115b049217a0..73e97710413bba3ee2ae8baab0537fbd78811016:/src/mc/checker/SafetyChecker.cpp diff --git a/src/mc/checker/SafetyChecker.cpp b/src/mc/checker/SafetyChecker.cpp index c11b0fecd0..bfb95171f7 100644 --- a/src/mc/checker/SafetyChecker.cpp +++ b/src/mc/checker/SafetyChecker.cpp @@ -3,16 +3,6 @@ /* 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. */ -#include -#include - -#include -#include -#include - -#include -#include - #include "src/mc/Session.hpp" #include "src/mc/Transition.hpp" #include "src/mc/VisitedState.hpp" @@ -23,6 +13,15 @@ #include "src/mc/mc_record.hpp" #include "src/xbt/mmalloc/mmprivate.h" +#include "xbt/log.h" +#include "xbt/sysdep.h" + +#include +#include + +#include +#include +#include using api = simgrid::mc::Api; @@ -90,7 +89,11 @@ void SafetyChecker::run() // Backtrack if we reached the maximum depth if (stack_.size() > (std::size_t)_sg_mc_max_depth) { - XBT_WARN("/!\\ Max depth reached ! /!\\ "); + if (reductionMode_ == ReductionMode::dpor) { + XBT_ERROR("/!\\ Max depth reached! THIS WILL PROBABLY BREAK the dpor reduction /!\\"); + XBT_ERROR("/!\\ If bad things happen, disable dpor with --cfg=model-check/reduction:none /!\\"); + } else + XBT_WARN("/!\\ Max depth reached ! /!\\ "); this->backtrack(); continue; } @@ -111,8 +114,11 @@ void SafetyChecker::run() // req is now the transition of the process that was selected to be executed if (req == nullptr) { - XBT_DEBUG("There are no more processes to interleave. (depth %zu)", stack_.size() + 1); + XBT_DEBUG("There remains %zu actors, but no more processes to interleave. (depth %zu)", + mc_model_checker->get_remote_process().actors().size(), stack_.size() + 1); + if (mc_model_checker->get_remote_process().actors().empty()) + mc_model_checker->finalize_app(); this->backtrack(); continue; } @@ -144,7 +150,7 @@ void SafetyChecker::run() /* If this is a new state (or if we don't care about state-equality reduction) */ if (visited_state_ == nullptr) { /* Get an enabled process and insert it in the interleave set of the next state */ - auto actors = api::get().get_actors(); + auto actors = api::get().get_actors(); for (auto& remoteActor : actors) { auto actor = remoteActor.copy.get_buffer(); if (get_session().actor_is_enabled(actor->get_pid())) { @@ -184,13 +190,12 @@ void SafetyChecker::backtrack() std::unique_ptr state = std::move(stack_.back()); stack_.pop_back(); if (reductionMode_ == ReductionMode::dpor) { - auto call = state->executed_req_.call_; - const kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_); + kernel::actor::ActorImpl* issuer = api::get().simcall_get_issuer(&state->executed_req_); for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) { State* prev_state = i->get(); if (state->executed_req_.issuer_ == prev_state->executed_req_.issuer_) { - XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(call), - SIMIX_simcall_name(prev_state->executed_req_.call_)); + XBT_DEBUG("Simcall %s and %s with same issuer", SIMIX_simcall_name(state->executed_req_), + SIMIX_simcall_name(prev_state->executed_req_)); break; } else if (api::get().simcall_check_dependency(&state->internal_req_, &prev_state->internal_req_)) { if (XBT_LOG_ISENABLED(mc_safety, xbt_log_priority_debug)) { @@ -206,13 +211,13 @@ void SafetyChecker::backtrack() if (not prev_state->actor_states_[issuer->get_pid()].is_done()) prev_state->mark_todo(issuer); else - XBT_DEBUG("Actor %s %ld is in done set", issuer->get_cname(), issuer->get_pid()); + XBT_DEBUG("Actor %s %ld is in done set", api::get().get_actor_name(issuer).c_str(), issuer->get_pid()); break; } else { const kernel::actor::ActorImpl* previous_issuer = api::get().simcall_get_issuer(&prev_state->executed_req_); XBT_DEBUG("Simcall %s, process %ld (state %d) and simcall %s, process %ld (state %d) are independent", - SIMIX_simcall_name(call), issuer->get_pid(), state->num_, - SIMIX_simcall_name(prev_state->executed_req_.call_), previous_issuer->get_pid(), prev_state->num_); + SIMIX_simcall_name(state->executed_req_), issuer->get_pid(), state->num_, + SIMIX_simcall_name(prev_state->executed_req_), previous_issuer->get_pid(), prev_state->num_); } } } @@ -289,7 +294,7 @@ SafetyChecker::SafetyChecker(Session* session) : Checker(session) stack_.push_back(std::move(initial_state)); } -Checker* createSafetyChecker(Session* session) +Checker* create_safety_checker(Session* session) { return new SafetyChecker(session); }