From 9d2b209def2b789aaea29be76a19706979943cda Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Tue, 19 Feb 2019 16:35:06 +0100 Subject: [PATCH 1/1] Fix MC build after changes for waitany. --- src/mc/mc_comm_pattern.cpp | 8 +++----- src/mc/mc_request.cpp | 27 ++++++++++----------------- src/mc/mc_state.cpp | 11 ++++------- 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/src/mc/mc_comm_pattern.cpp b/src/mc/mc_comm_pattern.cpp index 07e30d0db9..898c03654d 100644 --- a/src/mc/mc_comm_pattern.cpp +++ b/src/mc/mc_comm_pattern.cpp @@ -89,11 +89,9 @@ void MC_handle_comm_pattern( comm_addr = remote(static_cast(simcall_comm_wait__getraw__comm(req))); else { - simgrid::kernel::activity::CommImpl* addr; - // comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)): - simgrid::mc::read_element(mc_model_checker->process(), &addr, remote(simcall_comm_waitany__get__comms(req)), - value, sizeof(comm_addr)); - comm_addr = remote(addr); + simgrid::kernel::activity::ActivityImpl* addr; + addr = mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + value)); + comm_addr = remote(static_cast(addr)); } checker->complete_comm_pattern(pattern, comm_addr, MC_smx_simcall_get_issuer(req)->get_pid(), backtracking); } diff --git a/src/mc/mc_request.cpp b/src/mc/mc_request.cpp index 27a7ec8158..1aa4073d3a 100644 --- a/src/mc/mc_request.cpp +++ b/src/mc/mc_request.cpp @@ -301,17 +301,12 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid case SIMCALL_COMM_WAITANY: { type = "WaitAny"; - s_xbt_dynar_t comms; - mc_model_checker->process().read_bytes( - &comms, sizeof(comms), remote(simcall_comm_waitany__get__comms(req))); - if (not xbt_dynar_is_empty(&comms)) { - smx_activity_t remote_sync; - read_element(mc_model_checker->process(), - &remote_sync, remote(simcall_comm_waitany__get__comms(req)), value, - sizeof(remote_sync)); - char* p = pointer_to_string(remote_sync.get()); - args = bprintf("comm=%s (%d of %lu)", - p, value + 1, xbt_dynar_length(&comms)); + size_t count = simcall_comm_waitany__get__count(req); + if (count > 0) { + simgrid::kernel::activity::ActivityImpl* remote_sync; + remote_sync = mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + value)); + char* p = pointer_to_string(remote_sync); + args = bprintf("comm=%s (%d of %zu)", p, value + 1, count); xbt_free(p); } else args = bprintf("comm at idx %d", value); @@ -388,8 +383,7 @@ bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx) break; case SIMCALL_COMM_WAITANY: - read_element(mc_model_checker->process(), &remote_act, remote(simcall_comm_waitany__getraw__comms(req)), idx, - sizeof(remote_act)); + remote_act = mc_model_checker->process().read(remote(simcall_comm_testany__getraw__comms(req) + idx)); break; case SIMCALL_COMM_TESTANY: @@ -497,13 +491,12 @@ std::string request_get_dot_output(smx_simcall_t req, int value) } case SIMCALL_COMM_WAITANY: { - unsigned long comms_size = read_length( - mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(req))); + size_t comms_size = simcall_comm_waitany__get__count(req); if (issuer->get_host()) - label = simgrid::xbt::string_printf("[(%ld)%s] WaitAny [%d of %lu]", issuer->get_pid(), + label = simgrid::xbt::string_printf("[(%ld)%s] WaitAny [%d of %zu]", issuer->get_pid(), MC_smx_actor_get_host_name(issuer), value + 1, comms_size); else - label = simgrid::xbt::string_printf("[(%ld)] WaitAny [%d of %lu]", issuer->get_pid(), value + 1, comms_size); + label = simgrid::xbt::string_printf("[(%ld)] WaitAny [%d of %zu]", issuer->get_pid(), value + 1, comms_size); break; } diff --git a/src/mc/mc_state.cpp b/src/mc/mc_state.cpp index 7095aa97b5..707a6d0d99 100644 --- a/src/mc/mc_state.cpp +++ b/src/mc/mc_state.cpp @@ -75,17 +75,14 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State* switch (actor->simcall.call) { case SIMCALL_COMM_WAITANY: state->transition.argument = -1; - while (procstate->times_considered < - read_length(mc_model_checker->process(), remote(simcall_comm_waitany__get__comms(&actor->simcall)))) { + while (procstate->times_considered < simcall_comm_waitany__get__count(&actor->simcall)) { if (simgrid::mc::request_is_enabled_by_idx(&actor->simcall, procstate->times_considered++)) { state->transition.argument = procstate->times_considered - 1; break; } } - if (procstate->times_considered >= - simgrid::mc::read_length(mc_model_checker->process(), - simgrid::mc::remote(simcall_comm_waitany__get__comms(&actor->simcall)))) + if (procstate->times_considered >= simcall_comm_waitany__get__count(&actor->simcall)) procstate->setDone(); if (state->transition.argument != -1) req = &actor->simcall; @@ -157,8 +154,8 @@ static inline smx_simcall_t MC_state_get_request_for_process(simgrid::mc::State* case SIMCALL_COMM_WAITANY: { state->internal_req.call = SIMCALL_COMM_WAIT; simgrid::kernel::activity::ActivityImpl* remote_comm; - read_element(mc_model_checker->process(), &remote_comm, remote(simcall_comm_waitany__getraw__comms(req)), - state->transition.argument, sizeof(remote_comm)); + remote_comm = + mc_model_checker->process().read(remote(simcall_comm_waitany__getraw__comms(req) + state->transition.argument)); 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()); -- 2.20.1