X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eb417d0c8064e83fc1211abc819ae93687505003..4801057254232c8283c0d392783eea07ecdd874f:/src/mc/mc_state.cpp diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index f3b35cdf6e..3611d8dcd5 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2014. The SimGrid Team. +/* Copyright (c) 2008-2015. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -13,6 +13,7 @@ #include "mc_private.h" #include "mc_comm_pattern.h" #include "mc_smx.h" +#include "mc_xbt.hpp" using simgrid::mc::remote; @@ -104,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); @@ -192,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; @@ -202,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) @@ -215,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; @@ -225,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)