X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e91f4e50de913c126b42d09d227eb416bb320dae..3947c224ccae955ec9f879ebd894460c450f58ce:/src/mc/mc_global.cpp diff --git a/src/mc/mc_global.cpp b/src/mc/mc_global.cpp index cf23f62827..5ad3660d61 100644 --- a/src/mc/mc_global.cpp +++ b/src/mc/mc_global.cpp @@ -13,6 +13,10 @@ #include +#include +#include +#include + #include "mc_base.h" #include "mc/mc.h" @@ -40,6 +44,7 @@ #include "src/mc/mc_record.h" #include "src/mc/mc_protocol.h" #include "src/mc/Client.hpp" +#include "src/mc/Transition.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc, "Logging specific to MC (global)"); @@ -54,7 +59,6 @@ std::vector processes_time; } #if HAVE_MC -int user_max_depth_reached = 0; /* MC global data structures */ simgrid::mc::State* mc_current_state = nullptr; @@ -136,8 +140,6 @@ void replay(std::list> const& stack) /* Restore the initial state */ simgrid::mc::restore_snapshot(simgrid::mc::initial_global_state->snapshot); - /* At the moment of taking the snapshot the raw heap was set, so restoring - * it will set it back again, we have to unset it to continue */ if (_sg_mc_comms_determinism || _sg_mc_send_determinism) { // int n = xbt_dynar_length(incomplete_communications_pattern); @@ -146,7 +148,7 @@ void replay(std::list> const& stack) assert(n == xbt_dynar_length(initial_communications_pattern)); for (unsigned j=0; j < n ; j++) { xbt_dynar_reset((xbt_dynar_t)xbt_dynar_get_as(incomplete_communications_pattern, j, xbt_dynar_t)); - xbt_dynar_get_as(initial_communications_pattern, j, mc_list_comm_pattern_t)->index_comm = 0; + xbt_dynar_get_as(initial_communications_pattern, j, simgrid::mc::PatternCommunicationList*)->index_comm = 0; } } @@ -157,8 +159,8 @@ void replay(std::list> const& stack) if (state == stack.back()) break; - int value; - smx_simcall_t saved_req = MC_state_get_executed_request(state.get(), &value); + int req_num = state->transition.argument; + smx_simcall_t saved_req = &state->executed_req; if (saved_req) { /* because we got a copy of the executed request, we have to fetch the @@ -168,22 +170,19 @@ void replay(std::list> const& stack) smx_simcall_t req = &issuer->simcall; /* Debug information */ - if (XBT_LOG_ISENABLED(mc_global, xbt_log_priority_debug)) { - char* req_str = simgrid::mc::request_to_string(req, value, simgrid::mc::RequestType::simix); - XBT_DEBUG("Replay: %s (%p)", req_str, state.get()); - xbt_free(req_str); - } + XBT_DEBUG("Replay: %s (%p)", + simgrid::mc::request_to_string( + req, req_num, simgrid::mc::RequestType::simix).c_str(), + state.get()); /* TODO : handle test and testany simcalls */ e_mc_call_type_t call = MC_CALL_TYPE_NONE; if (_sg_mc_comms_determinism || _sg_mc_send_determinism) call = MC_get_call_type(req); - simgrid::mc::handle_simcall(req, value); - + mc_model_checker->handle_simcall(state->transition); if (_sg_mc_comms_determinism || _sg_mc_send_determinism) - MC_handle_comm_pattern(call, req, value, nullptr, 1); - + MC_handle_comm_pattern(call, req, req_num, nullptr, 1); mc_model_checker->wait_for_requests(); count++;