X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2d3663e664ee25ef5db2b09e3a0340b8ac21ec60..3a1ea70a418f393ca1677074e928c664022295bd:/src/mc/checker/SafetyChecker.cpp diff --git a/src/mc/checker/SafetyChecker.cpp b/src/mc/checker/SafetyChecker.cpp index bb45a97b66..9f9716fe6f 100644 --- a/src/mc/checker/SafetyChecker.cpp +++ b/src/mc/checker/SafetyChecker.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2016-2020. 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. */ @@ -31,7 +31,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_safety, mc, "Logging specific to MC safety ve namespace simgrid { namespace mc { -void SafetyChecker::check_non_termination(State* current_state) +void SafetyChecker::check_non_termination(const State* current_state) { for (auto state = stack_.rbegin(); state != stack_.rend(); ++state) if (snapshot_equal((*state)->system_state_.get(), current_state->system_state_.get())) { @@ -135,7 +135,8 @@ void SafetyChecker::run() this->get_session().execute(state->transition_); /* Create the new expanded state (copy the state of MCed into our MCer data) */ - std::unique_ptr next_state = std::unique_ptr(new State(++expanded_states_count_)); + ++expanded_states_count_; + auto next_state = std::make_unique(expanded_states_count_); if (_sg_mc_termination) this->check_non_termination(next_state.get()); @@ -147,7 +148,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 */ - for (auto& remoteActor : mc_model_checker->process().actors()) { + for (auto& remoteActor : mc_model_checker->get_remote_simulation().actors()) { auto actor = remoteActor.copy.get_buffer(); if (actor_is_enabled(actor)) { next_state->add_interleaving_set(actor); @@ -194,7 +195,7 @@ void SafetyChecker::backtrack() if (req->call_ == SIMCALL_MUTEX_LOCK || req->call_ == SIMCALL_MUTEX_TRYLOCK) xbt_die("Mutex is currently not supported with DPOR, use --cfg=model-check/reduction:none"); - const smx_actor_t issuer = MC_smx_simcall_get_issuer(req); + const kernel::actor::ActorImpl* issuer = MC_smx_simcall_get_issuer(req); for (auto i = stack_.rbegin(); i != stack_.rend(); ++i) { State* prev_state = i->get(); if (request_depend(req, &prev_state->internal_req_)) { @@ -246,7 +247,7 @@ void SafetyChecker::restore_state() /* Intermediate backtracking */ const State* last_state = stack_.back().get(); if (last_state->system_state_) { - last_state->system_state_->restore(&mc_model_checker->process()); + last_state->system_state_->restore(&mc_model_checker->get_remote_simulation()); return; } @@ -282,13 +283,14 @@ SafetyChecker::SafetyChecker(Session& s) : Checker(s) XBT_DEBUG("Starting the safety algorithm"); - std::unique_ptr initial_state = std::unique_ptr(new State(++expanded_states_count_)); + ++expanded_states_count_; + auto initial_state = std::make_unique(expanded_states_count_); XBT_DEBUG("**************************************************"); XBT_DEBUG("Initial state"); /* Get an enabled actor and insert it in the interleave set of the initial state */ - for (auto& actor : mc_model_checker->process().actors()) + for (auto& actor : mc_model_checker->get_remote_simulation().actors()) if (actor_is_enabled(actor.copy.get_buffer())) { initial_state->add_interleaving_set(actor.copy.get_buffer()); if (reductionMode_ != ReductionMode::none)