X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6d6ee3cd05fd81d6eca0b61ad21bf2912dad51b2..ad9d9459261f6f55f69edc333689ad86f2a9f229:/src/mc/mc_state.cpp diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index 50df4a3f11..4f467f266f 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -49,7 +49,7 @@ namespace mc { State::State() { - std::memset(&this->internal_comm, 0, sizeof(this->internal_comm)); + this->internal_comm.clear(); std::memset(&this->internal_req, 0, sizeof(this->internal_req)); std::memset(&this->executed_req, 0, sizeof(this->executed_req)); } @@ -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 = temp_act.getBuffer(); + 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,8 +179,9 @@ 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)); - simcall_comm_wait__set__comm(&state->internal_req, &state->internal_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.getBuffer()); simcall_comm_wait__set__timeout(&state->internal_req, 0); break; } @@ -193,10 +195,11 @@ 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); + simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer()); simcall_comm_test__set__result(&state->internal_req, state->transition.argument); break; @@ -204,16 +207,16 @@ static inline smx_simcall_t MC_state_get_request_for_process( state->internal_req = *req; mc_model_checker->process().read_bytes(&state->internal_comm , sizeof(state->internal_comm), remote(simcall_comm_wait__get__comm(req))); - simcall_comm_wait__set__comm(&state->executed_req, &state->internal_comm); - simcall_comm_wait__set__comm(&state->internal_req, &state->internal_comm); + simcall_comm_wait__set__comm(&state->executed_req, state->internal_comm.getBuffer()); + simcall_comm_wait__set__comm(&state->internal_req, state->internal_comm.getBuffer()); break; case SIMCALL_COMM_TEST: state->internal_req = *req; mc_model_checker->process().read_bytes(&state->internal_comm, sizeof(state->internal_comm), remote(simcall_comm_test__get__comm(req))); - simcall_comm_test__set__comm(&state->executed_req, &state->internal_comm); - simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm); + simcall_comm_test__set__comm(&state->executed_req, state->internal_comm.getBuffer()); + simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer()); break; default: @@ -227,7 +230,7 @@ static inline smx_simcall_t MC_state_get_request_for_process( smx_simcall_t MC_state_get_request(simgrid::mc::State* state) { for (auto& p : mc_model_checker->process().simix_processes()) { - smx_simcall_t res = MC_state_get_request_for_process(state, &p.copy); + smx_simcall_t res = MC_state_get_request_for_process(state, p.copy.getBuffer()); if (res) return res; }