Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : abort if acceptance cycle detected
[simgrid.git] / src / mc / mc_liveness.c
index 3dc68fc..81f7120 100644 (file)
@@ -198,7 +198,7 @@ int reached(xbt_state_t st){
   new_pair->automaton_state = st;
   new_pair->prop_ato = xbt_dynar_new(sizeof(int), NULL);
   new_pair->comparison_times = new_comparison_times();
-  new_pair->system_state = MC_take_snapshot_liveness();  
+  new_pair->system_state = MC_take_snapshot();  
   
   /* Get values of propositional symbols */
   int res;
@@ -247,10 +247,10 @@ int reached(xbt_state_t st){
             return 1;
           }       
         }else{
-          XBT_INFO("Different values of propositional symbols");
+          XBT_DEBUG("Different values of propositional symbols");
         }
       }else{
-        XBT_INFO("Different automaton state");
+        XBT_DEBUG("Different automaton state");
       }
       if(pair_test->comparison_times != NULL && XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){
         XBT_DEBUG("*** Comparison times statistics ***");
@@ -286,7 +286,7 @@ void set_pair_reached(xbt_state_t st){
   pair->automaton_state = st;
   pair->prop_ato = xbt_dynar_new(sizeof(int), NULL);
   pair->comparison_times = new_comparison_times();
-  pair->system_state = MC_take_snapshot_liveness();
+  pair->system_state = MC_take_snapshot();
 
   /* Get values of propositional symbols */
   unsigned int cursor = 0;
@@ -311,7 +311,7 @@ void set_pair_reached(xbt_state_t st){
 
 int visited(xbt_state_t st){
 
-  if(_surf_mc_stateful == 0)
+  if(_surf_mc_visited == 0)
     return 0;
 
   int raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
@@ -322,7 +322,7 @@ int visited(xbt_state_t st){
   new_pair = xbt_new0(s_mc_pair_visited_t, 1);
   new_pair->automaton_state = st;
   new_pair->prop_ato = xbt_dynar_new(sizeof(int), NULL);
-  new_pair->system_state = MC_take_snapshot_liveness();  
+  new_pair->system_state = MC_take_snapshot();  
   
   /* Get values of propositional symbols */
   int res;
@@ -370,14 +370,14 @@ int visited(xbt_state_t st){
             return 1;
           }   
         }else{
-          XBT_INFO("Different values of propositional symbols");
+          XBT_DEBUG("Different values of propositional symbols");
         }
       }else{
-        XBT_INFO("Different automaton state");
+        XBT_DEBUG("Different automaton state");
       }
     }
 
-    if(xbt_dynar_length(visited_pairs) == _surf_mc_stateful){
+    if(xbt_dynar_length(visited_pairs) == _surf_mc_visited){
       xbt_dynar_remove_at(visited_pairs, 0, NULL);
     }
 
@@ -480,6 +480,15 @@ void pair_reached_free(mc_pair_reached_t pair){
   if(pair){
     pair->automaton_state = NULL;
     xbt_dynar_free(&(pair->prop_ato));
+    if(pair->comparison_times != NULL){
+      xbt_dynar_free(&(pair->comparison_times->snapshot_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->chunks_used_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->stacks_sizes_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->program_data_segment_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->libsimgrid_data_segment_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->heap_comparison_times));
+      xbt_dynar_free(&(pair->comparison_times->stacks_comparison_times));
+    }
     MC_free_snapshot(pair->system_state);
     xbt_free(pair);
   }
@@ -493,9 +502,9 @@ void MC_ddfs_init(void){
 
   initial_state_liveness->raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
-  XBT_INFO("**************************************************");
-  XBT_INFO("Double-DFS init");
-  XBT_INFO("**************************************************");
+  XBT_DEBUG("**************************************************");
+  XBT_DEBUG("Double-DFS init");
+  XBT_DEBUG("**************************************************");
 
   mc_pair_stateless_t mc_initial_pair = NULL;
   mc_state_t initial_graph_state = NULL;
@@ -518,7 +527,7 @@ void MC_ddfs_init(void){
   successors = xbt_dynar_new(sizeof(mc_pair_stateless_t), NULL);
 
   /* Save the initial state */
-  initial_state_liveness->snapshot = MC_take_snapshot_liveness();
+  initial_state_liveness->snapshot = MC_take_snapshot();
 
   MC_UNSET_RAW_MEM; 
   
@@ -635,7 +644,6 @@ void MC_ddfs(int search_cycle){
         next_graph_state = MC_state_pair_new();
 
         /* Get enabled process and insert it in the interleave set of the next graph_state */
-
         xbt_swag_foreach(process, simix_global->process_list){
           if(MC_process_is_enabled(process)){
             XBT_DEBUG("Process %lu enabled with simcall : %d", process->pid, (&process->simcall)->call); 
@@ -850,7 +858,7 @@ void MC_ddfs(int search_cycle){
               MC_show_stack_liveness(mc_stack_liveness);
               MC_dump_stack_liveness(mc_stack_liveness);
               MC_print_statistics_pairs(mc_stats_pair);
-              exit(0);
+              xbt_abort();
 
             }else{
 
@@ -907,8 +915,12 @@ void MC_ddfs(int search_cycle){
     
   }else{
     
-    XBT_DEBUG("Max depth reached");
-
+    XBT_WARN("/!\\ Max depth reached ! /!\\ ");
+    if(current_pair->requests > 0){
+      XBT_WARN("/!\\ But, there are still processes to interleave. Model-checker will not be able to ensure the soundness of the verification from now. /!\\ "); 
+      XBT_WARN("Notice : the default value of max depth is 1000 but you can change it with cfg=model-check/max_depth:value.");
+    }
+    
   }
 
   if(xbt_fifo_size(mc_stack_liveness) == _surf_mc_max_depth ){