From: Gabriel Corona Date: Thu, 12 Mar 2015 13:42:21 +0000 (+0100) Subject: [mc] Remote support for filling state->internal_comm X-Git-Tag: v3_12~732^2~108 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/7f0845ec805dc9b93cab3adb223eadd20aa1f169 [mc] Remote support for filling state->internal_comm --- diff --git a/src/mc/mc_process.c b/src/mc/mc_process.c index e3f4eb8378..7e047abad8 100644 --- a/src/mc/mc_process.c +++ b/src/mc/mc_process.c @@ -507,7 +507,17 @@ const void* MC_process_read_simple(mc_process_t process, { e_adress_space_read_flags_t flags = MC_PROCESS_NO_FLAG; int index = MC_PROCESS_INDEX_ANY; - return MC_process_read(process, flags, local, remote, len, index); + MC_process_read(process, flags, local, remote, len, index); + return local; +} + +const void* MC_process_read_dynar_element(mc_process_t process, + void* local, const void* remote_dynar, size_t i) +{ + s_xbt_dynar_t d; + MC_process_read_simple(process, &d, remote_dynar, sizeof(d)); + MC_process_read_simple(process, local, xbt_dynar_get_ptr(&d, i), i); + return local; } void MC_process_write(mc_process_t process, const void* local, void* remote, size_t len) diff --git a/src/mc/mc_process.h b/src/mc/mc_process.h index c16802d7b2..84d90cd6fe 100644 --- a/src/mc/mc_process.h +++ b/src/mc/mc_process.h @@ -162,6 +162,9 @@ const void* MC_process_read(mc_process_t process, const void* MC_process_read_simple(mc_process_t process, void* local, const void* remote, size_t len); +const void* MC_process_read_dynar_element(mc_process_t process, + void* local, const void* remote_dynar, size_t i); + /** Write data to a process memory * * @param process the process diff --git a/src/mc/mc_smx.h b/src/mc/mc_smx.h index 733d63f962..fa7a5651f7 100644 --- a/src/mc/mc_smx.h +++ b/src/mc/mc_smx.h @@ -93,8 +93,6 @@ smx_process_t MC_smx_resolve_process(smx_process_t process_remote_address); /** Get the process info structure from the process remote address */ mc_smx_process_info_t MC_smx_resolve_process_info(smx_process_t process_remote_address); - - SG_END_DECL() #endif diff --git a/src/mc/mc_state.c b/src/mc/mc_state.c index 0c079d5377..d67fe350d8 100644 --- a/src/mc/mc_state.c +++ b/src/mc/mc_state.c @@ -144,10 +144,9 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, case SIMCALL_COMM_WAITANY: state->internal_req.call = SIMCALL_COMM_WAIT; state->internal_req.issuer = req->issuer; - // FIXME, read from remote process - state->internal_comm = - *xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, - smx_synchro_t); + MC_process_read_dynar_element(&mc_model_checker->process, + &state->internal_comm, simcall_comm_waitany__get__comms(req), + sizeof(state->internal_comm)); simcall_comm_wait__set__comm(&state->internal_req, &state->internal_comm); simcall_comm_wait__set__timeout(&state->internal_req, 0); break; @@ -158,9 +157,9 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, if (value > 0) // FIXME, read from remote process - state->internal_comm = - *xbt_dynar_get_as(simcall_comm_testany__get__comms(req), value, - smx_synchro_t); + MC_process_read_dynar_element(&mc_model_checker->process, + &state->internal_comm, simcall_comm_testany__get__comms(req), + sizeof(state->internal_comm)); simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm); simcall_comm_test__set__result(&state->internal_req, value); @@ -168,16 +167,16 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, case SIMCALL_COMM_WAIT: state->internal_req = *req; - // FIXME, read from remote process - state->internal_comm = *(simcall_comm_wait__get__comm(req)); + MC_process_read_simple(&mc_model_checker->process, &state->internal_comm , + simcall_comm_wait__get__comm(req), sizeof(state->internal_comm)); 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; - // FIXME, read from remote process - state->internal_comm = *simcall_comm_test__get__comm(req); + MC_process_read_simple(&mc_model_checker->process, &state->internal_comm, + simcall_comm_test__get__comm(req), sizeof(state->internal_comm)); simcall_comm_test__set__comm(&state->executed_req, &state->internal_comm); simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm); break;