X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/639e88c95c355661b56405f608d54c27d24ac7c5..0f12caebeefc7985a0586836248238e475258079:/src/mc/mc_state.cpp diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index a40b2cadb8..771b348f20 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -28,13 +28,13 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_state, mc, /** * \brief Creates a state data structure used by the exploration algorithm */ -simgrid::mc::State* MC_state_new() +simgrid::mc::State* MC_state_new(unsigned long state_number) { simgrid::mc::State* state = new simgrid::mc::State(); state->processStates.resize(MC_smx_get_maxpid()); - state->num = ++mc_stats->expanded_states; + state->num = state_number; /* Stateful model checking */ - if((_sg_mc_checkpoint > 0 && (mc_stats->expanded_states % _sg_mc_checkpoint == 0)) || _sg_mc_termination){ + if((_sg_mc_checkpoint > 0 && (state_number % _sg_mc_checkpoint == 0)) || _sg_mc_termination){ state->system_state = simgrid::mc::take_snapshot(state->num); if(_sg_mc_comms_determinism || _sg_mc_send_determinism){ MC_state_copy_incomplete_communications_pattern(state); @@ -49,7 +49,7 @@ namespace mc { State::State() { - std::memset(&this->internal_comm, 0, sizeof(this->internal_comm)); + std::memset(this->internal_comm.data(), 0, this->internal_comm.size()); std::memset(&this->internal_req, 0, sizeof(this->internal_req)); std::memset(&this->executed_req, 0, sizeof(this->executed_req)); } @@ -60,7 +60,7 @@ std::size_t State::interleaveSize() const [](simgrid::mc::ProcessState const& state) { return state.isToInterleave(); }); } -Transition State::getRecordElement() const +Transition State::getTransition() const { return this->transition; } @@ -126,14 +126,15 @@ static inline smx_simcall_t MC_state_get_request_for_process( } case SIMCALL_COMM_WAIT: { - smx_synchro_t remote_act = simcall_comm_wait__get__comm(&process->simcall); - s_smx_synchro_t act; - mc_model_checker->process().read_bytes( - &act, sizeof(act), remote(remote_act)); - if (act.comm.src_proc && act.comm.dst_proc) + simgrid::mc::RemotePtr remote_act = remote( + static_cast(simcall_comm_wait__get__comm(&process->simcall))); + simgrid::mc::Remote temp_act; + mc_model_checker->process().read(temp_act, remote_act); + simgrid::simix::Comm* act = static_cast(temp_act.data()); + if (act->src_proc && act->dst_proc) state->transition.argument = 0; - else if (act.comm.src_proc == nullptr && act.comm.type == SIMIX_COMM_READY - && act.comm.detached == 1) + else if (act->src_proc == nullptr && act->type == SIMIX_COMM_READY + && act->detached == 1) state->transition.argument = 0; else state->transition.argument = -1; @@ -178,7 +179,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( read_element(mc_model_checker->process(), &remote_comm, remote(simcall_comm_waitany__get__comms(req)), state->transition.argument, sizeof(remote_comm)); - mc_model_checker->process().read(&state->internal_comm, remote(remote_comm)); + mc_model_checker->process().read(state->internal_comm, remote( + static_cast(remote_comm))); simcall_comm_wait__set__comm(&state->internal_req, &state->internal_comm); simcall_comm_wait__set__timeout(&state->internal_req, 0); break; @@ -193,7 +195,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( read_element(mc_model_checker->process(), &remote_comm, remote(simcall_comm_testany__get__comms(req)), state->transition.argument, sizeof(remote_comm)); - mc_model_checker->process().read(&state->internal_comm, remote(remote_comm)); + mc_model_checker->process().read(state->internal_comm, remote( + static_cast(remote_comm))); } simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm);