X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d7d6db175cc786205321b1bfb6177e43f44cf85b..7f06482332409f552ac19d126fa69520ade79fcb:/src/mc/mc_liveness.c diff --git a/src/mc/mc_liveness.c b/src/mc/mc_liveness.c index 47849d6977..561d3653b9 100644 --- a/src/mc/mc_liveness.c +++ b/src/mc/mc_liveness.c @@ -83,14 +83,14 @@ static int is_reached_acceptance_pair(mc_pair_t pair){ nb_processes_test = pair_test->nb_processes; if(nb_processes_test < current_nb_processes) start = cursor + 1; - if(nb_processes_test > current_nb_processes) + else 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){ if(bytes_used_test < current_bytes_used) start = cursor + 1; - if(bytes_used_test > current_bytes_used) + else if(bytes_used_test > current_bytes_used) end = cursor - 1; - if(bytes_used_test == current_bytes_used){ + else if(bytes_used_test == current_bytes_used){ same_processes_and_bytes_not_found = 0; if(xbt_automaton_state_compare(pair_test->automaton_state, pair->automaton_state) == 0){ if(xbt_automaton_propositional_symbols_compare_value(pair_test->atomic_propositions, pair->atomic_propositions) == 0){ @@ -310,14 +310,14 @@ static int is_visited_pair(mc_pair_t pair){ nb_processes_test = pair_test->nb_processes; if(nb_processes_test < current_nb_processes) start = cursor + 1; - if(nb_processes_test > current_nb_processes) + else 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){ if(bytes_used_test < current_bytes_used) start = cursor + 1; - if(bytes_used_test > current_bytes_used) + else if(bytes_used_test > current_bytes_used) end = cursor - 1; - if(bytes_used_test == current_bytes_used){ + else if(bytes_used_test == current_bytes_used){ same_processes_and_bytes_not_found = 0; if(xbt_automaton_state_compare(pair_test->automaton_state, pair->automaton_state) == 0){ if(xbt_automaton_propositional_symbols_compare_value(pair_test->atomic_propositions, pair->atomic_propositions) == 0){ @@ -506,6 +506,7 @@ void MC_ddfs_init(void){ successors = xbt_dynar_new(sizeof(mc_pair_t), NULL); initial_state_liveness->snapshot = MC_take_snapshot(); + initial_state_liveness->prev_pair = 0; MC_UNSET_RAW_MEM; @@ -632,6 +633,8 @@ void MC_ddfs(){ MC_SET_RAW_MEM; xbt_fifo_shift(mc_stack_liveness); + if(dot_output != NULL) + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_state_liveness->prev_pair, reached_num, initial_state_liveness->prev_req); MC_UNSET_RAW_MEM; XBT_INFO("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); @@ -650,18 +653,41 @@ void MC_ddfs(){ if((visited_num = is_visited_pair(current_pair)) != -1){ XBT_DEBUG("Pair %d already visited ! (equal to pair %d)", current_pair->num, visited_num); + + MC_SET_RAW_MEM; + if(dot_output != NULL) + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_state_liveness->prev_pair, visited_num, initial_state_liveness->prev_req); + MC_UNSET_RAW_MEM; + - }else{ + }else{ while((req = MC_state_get_request(current_pair->graph_state, &value)) != NULL){ - + + MC_SET_RAW_MEM; + if(dot_output != NULL){ + if(initial_state_liveness->prev_pair != 0 && initial_state_liveness->prev_pair != current_pair->num){ + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_state_liveness->prev_pair, current_pair->num, initial_state_liveness->prev_req); + xbt_free(initial_state_liveness->prev_req); + } + initial_state_liveness->prev_pair = current_pair->num; + } + MC_UNSET_RAW_MEM; + /* Debug information */ - if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ req_str = MC_request_to_string(req, value); XBT_DEBUG("Execute: %s", req_str); xbt_free(req_str); } + + MC_SET_RAW_MEM; + if(dot_output != NULL){ + initial_state_liveness->prev_req = MC_request_get_dot_output(req, value); + if(current_pair->search_cycle) + fprintf(dot_output, "%d [shape=doublecircle];\n", current_pair->num); + } + MC_UNSET_RAW_MEM; MC_state_set_executed_request(current_pair->graph_state, req, value); mc_stats->executed_transitions++; @@ -843,6 +869,9 @@ void MC_ddfs(){ if(mc_stats->expanded_pairs%1000 == 0) XBT_INFO("Expanded pairs : %lu", mc_stats->expanded_pairs); + if(dot_output != NULL) + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", current_pair->num, next_pair->num, ""); + MC_UNSET_RAW_MEM; new_pair = 1; @@ -880,6 +909,9 @@ void MC_ddfs(){ if(mc_stats->expanded_pairs%1000 == 0) XBT_INFO("Expanded pairs : %lu", mc_stats->expanded_pairs); + if(dot_output != NULL) + fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", current_pair->num, next_pair->num, ""); + MC_UNSET_RAW_MEM; new_pair = 1; @@ -911,11 +943,10 @@ void MC_ddfs(){ MC_SET_RAW_MEM; - if(prop_values != NULL) - xbt_dynar_free(&prop_values); + xbt_dynar_free(&prop_values); current_pair = xbt_fifo_shift(mc_stack_liveness); current_pair->stack_removed = 1; - if((current_pair->automaton_state->type == 1) || (current_pair->automaton_state->type == 2)){ + if(current_pair->search_cycle){ remove_acceptance_pair(current_pair); }else{ if(_sg_mc_visited == 0)