X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ea1c5a880fd056c637c99a6cc7ec0b9b62ac87c7..bfed6d5d4681739a8f146571c3d2f09798d0ecf4:/src/mc/mc_state.c?ds=sidebyside diff --git a/src/mc/mc_state.c b/src/mc/mc_state.c index 7faf1f1260..d43a6bc7a2 100644 --- a/src/mc/mc_state.c +++ b/src/mc/mc_state.c @@ -41,6 +41,8 @@ mc_state_t MC_state_pair_new(void) */ void MC_state_delete(mc_state_t state) { + if(state->system_state) + MC_free_snapshot(state->system_state); xbt_free(state->proc_status); xbt_free(state); } @@ -115,6 +117,11 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req, int valu simcall_comm_test__set__comm(&state->internal_req, &state->internal_comm); break; + case SIMCALL_MC_RANDOM: + state->internal_req = *req; + simcall_mc_random__set__result(&state->internal_req, value); + break; + default: state->internal_req = *req; break; @@ -137,6 +144,13 @@ smx_simcall_t MC_state_get_request(mc_state_t state, int *value) smx_process_t process = NULL; mc_procstate_t procstate = NULL; unsigned int start_count; + int min, max; + + static int first = 0; + if(first == 0){ + srand(987654321); + first = 1; + } xbt_swag_foreach(process, simix_global->process_list){ procstate = &state->proc_status[process->pid]; @@ -191,6 +205,14 @@ smx_simcall_t MC_state_get_request(mc_state_t state, int *value) break; + case SIMCALL_MC_RANDOM: + min = simcall_mc_random__get__min(&process->simcall); + max = simcall_mc_random__get__max(&process->simcall); + *value = (int)((rand() % ((max-min)+1)) + min); + procstate->state = MC_DONE; + return &process->simcall; + break; + default: procstate->state = MC_DONE; *value = 0;