}
const void* MC_process_read_dynar_element(mc_process_t process,
- void* local, const void* remote_dynar, size_t i)
+ void* local, const void* remote_dynar, size_t i, size_t len)
{
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);
+ if (i >= d.used)
+ xbt_die("Out of bound index %zi/%zi", i, d.used);
+ if (len != d.elmsize)
+ xbt_die("Bad size in MC_process_read_dynar_element");
+ MC_process_read_simple(process, local, xbt_dynar_get_ptr(&d, i), len);
return local;
}
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);
+ void* local, const void* remote_dynar, size_t i, size_t len);
unsigned long MC_process_read_dynar_length(mc_process_t process, const void* remote_dynar);
/** Write data to a process memory
if (!xbt_dynar_is_empty(&comms)) {
smx_synchro_t remote_sync;
MC_process_read_dynar_element(&mc_model_checker->process,
- &remote_sync, simcall_comm_waitany__get__comms(req), value);
+ &remote_sync, simcall_comm_waitany__get__comms(req), value,
+ sizeof(remote_sync));
char* p = pointer_to_string(remote_sync);
args = bprintf("comm=%s (%d of %lu)",
p, value + 1, xbt_dynar_length(&comms));
smx_synchro_t act;
MC_process_read_dynar_element(
&mc_model_checker->process, &act, simcall_comm_waitany__get__comms(req),
- idx);
+ idx, sizeof(act));
}
break;
s_smx_synchro_t act;
MC_process_read_dynar_element(
&mc_model_checker->process, &act, simcall_comm_testany__get__comms(req),
- idx);
+ idx, sizeof(act));
}
break;
state->internal_req.issuer = req->issuer;
MC_process_read_dynar_element(&mc_model_checker->process,
&state->internal_comm, simcall_comm_waitany__get__comms(req),
- sizeof(state->internal_comm));
+ value, 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;
if (value > 0)
MC_process_read_dynar_element(&mc_model_checker->process,
&state->internal_comm, simcall_comm_testany__get__comms(req),
- sizeof(state->internal_comm));
+ value, sizeof(state->internal_comm));
simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm);
simcall_comm_test__set__result(&state->internal_req, value);