X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2da1db1d3c70aa206051434d75d641882f00ecc8..d7f09767e1c69493afa04dce4b6ed1f2d77b966a:/src/mc/mc_dpor.c diff --git a/src/mc/mc_dpor.c b/src/mc/mc_dpor.c index 565e389f0f..a943e9e9e1 100644 --- a/src/mc/mc_dpor.c +++ b/src/mc/mc_dpor.c @@ -82,11 +82,11 @@ static int is_visited_state(){ state_test = (mc_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_visited_state_t); bytes_used_test = state_test->heap_bytes_used; nb_processes_test = state_test->nb_processes; - if(nb_processes_test < current_nb_processes) + if(nb_processes_test < current_nb_processes){ start = cursor + 1; - if(nb_processes_test > current_nb_processes) - end = cursor - 1; - if(nb_processes_test == current_nb_processes){ + }else if(nb_processes_test > current_nb_processes){ + end = cursor - 1; + }else if(nb_processes_test == current_nb_processes){ if(bytes_used_test < current_bytes_used) start = cursor + 1; if(bytes_used_test > current_bytes_used) @@ -282,7 +282,8 @@ void MC_dpor(void) xbt_free(req_str); } - req_str = MC_request_get_dot_output(req, value); + if(dot_output != NULL) + req_str = MC_request_get_dot_output(req, value); MC_state_set_executed_request(state, req, value); mc_stats->executed_transitions++; @@ -345,7 +346,8 @@ void MC_dpor(void) MC_UNSET_RAW_MEM; - xbt_free(req_str); + if(dot_output != NULL) + xbt_free(req_str); /* Let's loop again */ @@ -376,7 +378,18 @@ void MC_dpor(void) } } - max_depth_reached = 1; + if(MC_state_interleave_size(state) > 0){ + max_depth_reached = 1; + }else{ + /* Trash the current state, no longer needed */ + MC_SET_RAW_MEM; + xbt_fifo_shift(mc_stack_safety); + MC_state_delete(state); + MC_UNSET_RAW_MEM; + + max_depth_reached = 0; + } + }else{ @@ -475,6 +488,7 @@ void MC_dpor(void) XBT_DEBUG("Back-tracking to depth %d", xbt_fifo_size(mc_stack_safety)); break; } else { + XBT_DEBUG("Delete state at depth %d",xbt_fifo_size(mc_stack_safety) + 1); MC_state_delete(state); } }