X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/59054b2bcebd6cdc83ca72089f320f244e3b9b4f..3f9b311ec56db95ec539001a860ae3c838c48312:/src/mc/api/State.cpp diff --git a/src/mc/api/State.cpp b/src/mc/api/State.cpp index afd89041ba..f537a484b5 100644 --- a/src/mc/api/State.cpp +++ b/src/mc/api/State.cpp @@ -25,7 +25,6 @@ State::State(RemoteApp& remote_app) : num_(++expended_states_) { XBT_VERB("Creating a guide for the state"); - if (_sg_mc_strategy == "none") strategy_ = std::make_shared(); else if (_sg_mc_strategy == "max_match_comm") @@ -33,10 +32,9 @@ State::State(RemoteApp& remote_app) : num_(++expended_states_) else if (_sg_mc_strategy == "min_match_comm") strategy_ = std::make_shared(); else if (_sg_mc_strategy == "uniform") { - xbt::random::set_mersenne_seed(_sg_mc_random_seed); + xbt::random::set_mersenne_seed(_sg_mc_random_seed); strategy_ = std::make_shared(); - } - else + } else THROW_IMPOSSIBLE; remote_app.get_actors_status(strategy_->actors_to_run_); @@ -51,7 +49,7 @@ State::State(RemoteApp& remote_app, std::shared_ptr parent_state) strategy_ = std::make_shared(); else if (_sg_mc_strategy == "min_match_comm") strategy_ = std::make_shared(); - else if (_sg_mc_strategy == "uniform") + else if (_sg_mc_strategy == "uniform") strategy_ = std::make_shared(); else THROW_IMPOSSIBLE; @@ -201,6 +199,9 @@ void State::seed_wakeup_tree_if_needed(const odpor::Execution& prior) { // TODO: It would be better not to have such a flag. if (has_initialized_wakeup_tree) { + XBT_DEBUG("Reached a node with the following initialized WuT:"); + XBT_DEBUG("\n%s", wakeup_tree_.string_of_whole_tree().c_str()); + return; } // TODO: Note that the next action taken by the actor may be updated @@ -225,6 +226,10 @@ void State::seed_wakeup_tree_if_needed(const odpor::Execution& prior) void State::sprout_tree_from_parent_state() { + + XBT_DEBUG("Initializing Wut with parent one:"); + XBT_DEBUG("\n%s", parent_state_->wakeup_tree_.string_of_whole_tree().c_str()); + xbt_assert(parent_state_ != nullptr, "Attempting to construct a wakeup tree for the root state " "(or what appears to be, rather for state without a parent defined)"); const auto min_process_node = parent_state_->wakeup_tree_.get_min_single_process_node(); @@ -240,7 +245,7 @@ void State::sprout_tree_from_parent_state() "to schedule from the wakeup tree? Trace so far:", get_transition_in()->to_string(false).c_str(), get_transition_in()->aid_, min_process_node.value()->get_action()->to_string(false).c_str(), min_process_node.value()->get_actor()); - for (auto elm : Exploration::get_instance()->get_textual_trace()) + for (auto const& elm : Exploration::get_instance()->get_textual_trace()) XBT_ERROR("%s", elm.c_str()); xbt_abort(); } @@ -264,6 +269,11 @@ void State::remove_subtree_using_current_out_transition() wakeup_tree_.remove_min_single_process_subtree(); } +void State::remove_subtree_at_aid(const aid_t proc) +{ + wakeup_tree_.remove_subtree_at_aid(proc); +} + odpor::WakeupTree::InsertionResult State::insert_into_wakeup_tree(const odpor::PartialExecution& pe, const odpor::Execution& E) {