X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/26af220e017a088b56105b2f21fadecf7d6e2a88..02690c93e202e3c89febc4a4a06350e61a54e191:/src/mc/mc_state.cpp diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index 0ebde42a8b..7e03998891 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -13,6 +13,9 @@ #include "mc_private.h" #include "mc_comm_pattern.h" #include "mc_smx.h" +#include "mc_xbt.hpp" + +using simgrid::mc::remote; extern "C" { @@ -49,7 +52,7 @@ mc_state_t MC_state_new() */ void MC_state_delete(mc_state_t state, int free_snapshot){ if (state->system_state && free_snapshot){ - MC_free_snapshot(state->system_state); + delete state->system_state; } if(_sg_mc_comms_determinism || _sg_mc_send_determinism){ xbt_free(state->index_comm); @@ -102,24 +105,30 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, * corresponding communication action so it can be treated later by the dependence * function. */ switch (req->call) { - case SIMCALL_COMM_WAITANY: + case SIMCALL_COMM_WAITANY: { state->internal_req.call = SIMCALL_COMM_WAIT; state->internal_req.issuer = req->issuer; - MC_process_read_dynar_element(&mc_model_checker->process(), - &state->internal_comm, simcall_comm_waitany__get__comms(req), - value, sizeof(state->internal_comm)); + smx_synchro_t remote_comm; + read_element(mc_model_checker->process(), + &remote_comm, remote(simcall_comm_waitany__get__comms(req)), + value, 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); simcall_comm_wait__set__timeout(&state->internal_req, 0); break; + } case SIMCALL_COMM_TESTANY: state->internal_req.call = SIMCALL_COMM_TEST; state->internal_req.issuer = req->issuer; - if (value > 0) - MC_process_read_dynar_element(&mc_model_checker->process(), - &state->internal_comm, simcall_comm_testany__get__comms(req), - value, sizeof(state->internal_comm)); + if (value > 0) { + smx_synchro_t remote_comm; + read_element(mc_model_checker->process(), + &remote_comm, remote(simcall_comm_testany__get__comms(req)), + value, sizeof(remote_comm)); + mc_model_checker->process().read(&state->internal_comm, remote(remote_comm)); + } simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm); simcall_comm_test__set__result(&state->internal_req, value); @@ -127,16 +136,16 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, case SIMCALL_COMM_WAIT: state->internal_req = *req; - MC_process_read_simple(&mc_model_checker->process(), &state->internal_comm , - simcall_comm_wait__get__comm(req), sizeof(state->internal_comm)); + 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); break; case SIMCALL_COMM_TEST: state->internal_req = *req; - MC_process_read_simple(&mc_model_checker->process(), &state->internal_comm, - simcall_comm_test__get__comm(req), sizeof(state->internal_comm)); + 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); break; @@ -190,8 +199,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( case SIMCALL_COMM_WAITANY: *value = -1; while (procstate->interleave_count < - MC_process_read_dynar_length(&mc_model_checker->process(), - simcall_comm_waitany__get__comms(&process->simcall))) { + read_length(mc_model_checker->process(), + remote(simcall_comm_waitany__get__comms(&process->simcall)))) { if (MC_request_is_enabled_by_idx (&process->simcall, procstate->interleave_count++)) { *value = procstate->interleave_count - 1; @@ -200,8 +209,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( } if (procstate->interleave_count >= - MC_process_read_dynar_length(&mc_model_checker->process(), - simcall_comm_waitany__get__comms(&process->simcall))) + simgrid::mc::read_length(mc_model_checker->process(), + simgrid::mc::remote(simcall_comm_waitany__get__comms(&process->simcall)))) procstate->state = MC_DONE; if (*value != -1) @@ -213,8 +222,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( unsigned start_count = procstate->interleave_count; *value = -1; while (procstate->interleave_count < - MC_process_read_dynar_length(&mc_model_checker->process(), - simcall_comm_testany__get__comms(&process->simcall))) { + read_length(mc_model_checker->process(), + remote(simcall_comm_testany__get__comms(&process->simcall)))) { if (MC_request_is_enabled_by_idx (&process->simcall, procstate->interleave_count++)) { *value = procstate->interleave_count - 1; @@ -223,8 +232,8 @@ static inline smx_simcall_t MC_state_get_request_for_process( } if (procstate->interleave_count >= - MC_process_read_dynar_length(&mc_model_checker->process(), - simcall_comm_testany__get__comms(&process->simcall))) + read_length(mc_model_checker->process(), + remote(simcall_comm_testany__get__comms(&process->simcall)))) procstate->state = MC_DONE; if (*value != -1 || start_count == 0) @@ -236,8 +245,8 @@ 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_process_read_simple(&mc_model_checker->process(), - &act, remote_act, sizeof(act)); + mc_model_checker->process().read_bytes( + &act, sizeof(act), remote(remote_act)); if (act.comm.src_proc && act.comm.dst_proc) { *value = 0; } else {