Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : check current_heap before SET_RAW_MEM and restore it after UNSET_RAW_MEM
authorMarion Guthmuller <marion.guthmuller@loria.fr>
Tue, 26 Jun 2012 12:19:44 +0000 (14:19 +0200)
committerMarion Guthmuller <marion.guthmuller@loria.fr>
Wed, 27 Jun 2012 15:27:29 +0000 (17:27 +0200)
src/mc/mc_dpor.c
src/mc/mc_global.c
src/mc/mc_liveness.c
src/mc/mc_private.h

index 707ed9b..ac40618 100644 (file)
@@ -13,6 +13,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_dpor, mc,
  */
 void MC_dpor_init()
 {
+  
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   mc_state_t initial_state = NULL;
   smx_process_t process;
   
@@ -42,6 +45,12 @@ void MC_dpor_init()
   xbt_fifo_unshift(mc_stack_safety, initial_state);
 
   MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
     
   /* FIXME: Update Statistics 
      mc_stats->state_size +=
@@ -55,6 +64,9 @@ void MC_dpor_init()
  */
 void MC_dpor(void)
 {
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   char *req_str;
   int value;
   smx_simcall_t req = NULL, prev_req = NULL;
@@ -214,6 +226,13 @@ void MC_dpor(void)
   }
   MC_print_statistics(mc_stats);
   MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
+
   return;
 }
 
index b304337..1af07a9 100644 (file)
@@ -100,6 +100,8 @@ void MC_do_the_modelcheck_for_real() {
 void MC_init_safety(void)
 {
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   /* Check if MC is already initialized */
   if (initial_snapshot)
     return;
@@ -108,6 +110,7 @@ void MC_init_safety(void)
 
   /* Initialize the data structures that must be persistent across every
      iteration of the model-checker (in RAW memory) */
+  
   MC_SET_RAW_MEM;
 
   /* Initialize statistics */
@@ -127,6 +130,11 @@ void MC_init_safety(void)
   MC_take_snapshot(initial_snapshot);
   MC_UNSET_RAW_MEM;
 
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 }
 
 
@@ -138,6 +146,9 @@ void MC_modelcheck(void)
 }
 
 void MC_modelcheck_liveness(){
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   /* init stuff */
   XBT_DEBUG("Start init mc");
   
@@ -163,8 +174,8 @@ void MC_modelcheck_liveness(){
 
   /* We're done */
   MC_print_statistics_pairs(mc_stats_pair);
-  //xbt_free(mc_time);
-  //MC_memory_exit();
+  xbt_free(mc_time);
+  MC_memory_exit();
   exit(0);
 }
 
@@ -227,6 +238,8 @@ int MC_deadlock_check()
  */
 void MC_replay(xbt_fifo_t stack, int start)
 {
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   int value, i = 1;
   char *req_str;
   smx_simcall_t req = NULL, saved_req = NULL;
@@ -280,10 +293,20 @@ void MC_replay(xbt_fifo_t stack, int start)
     mc_stats->executed_transitions++;
   }
   XBT_DEBUG("**** End Replay ****");
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
+
 }
 
 void MC_replay_liveness(xbt_fifo_t stack, int all_stack)
 {
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   int value;
   char *req_str;
   smx_simcall_t req = NULL, saved_req = NULL;
@@ -383,6 +406,12 @@ void MC_replay_liveness(xbt_fifo_t stack, int all_stack)
   }  
 
   XBT_DEBUG("**** End Replay ****");
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 }
 
 /**
@@ -392,6 +421,8 @@ void MC_replay_liveness(xbt_fifo_t stack, int all_stack)
  */
 void MC_dump_stack_safety(xbt_fifo_t stack)
 {
+  
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
   MC_show_stack_safety(stack);
 
@@ -405,6 +436,12 @@ void MC_dump_stack_safety(xbt_fifo_t stack)
     MC_UNSET_RAW_MEM;
 
   }
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 }
 
 
@@ -467,12 +504,21 @@ void MC_show_stack_liveness(xbt_fifo_t stack){
 }
 
 void MC_dump_stack_liveness(xbt_fifo_t stack){
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   mc_pair_stateless_t pair;
 
   MC_SET_RAW_MEM;
   while ((pair = (mc_pair_stateless_t) xbt_fifo_pop(stack)) != NULL)
     MC_pair_stateless_delete(pair);
   MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+
 }
 
 
@@ -571,18 +617,41 @@ void MC_diff(void){
 }
 
 void MC_automaton_load(const char *file){
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   MC_SET_RAW_MEM;
 
   if (_mc_property_automaton == NULL)
     _mc_property_automaton = xbt_automaton_new();
+  
   xbt_automaton_load(_mc_property_automaton,file);
 
   MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+
 }
+
 void MC_automaton_new_propositional_symbol(const char* id, void* fct) {
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   MC_SET_RAW_MEM;
+
   if (_mc_property_automaton == NULL)
     _mc_property_automaton = xbt_automaton_new();
+
   xbt_new_propositional_symbol(_mc_property_automaton,id,fct);
+
   MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 }
index 6e86e52..1b05a14 100644 (file)
@@ -137,6 +137,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
 
 int reached(xbt_state_t st){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
 
   if(xbt_dynar_is_empty(reached_pairs)){
 
@@ -180,6 +182,12 @@ int reached(xbt_state_t st){
             xbt_dynar_reset(prop_ato);
             xbt_free(prop_ato);
             MC_UNSET_RAW_MEM;
+
+            if(raw_mem_set)
+              MC_SET_RAW_MEM;
+            else
+              MC_UNSET_RAW_MEM;
+            
             return 1;
           }
           /* }
@@ -198,6 +206,12 @@ int reached(xbt_state_t st){
     xbt_dynar_reset(prop_ato);
     xbt_free(prop_ato);
     MC_UNSET_RAW_MEM;
+
+    if(raw_mem_set)
+      MC_SET_RAW_MEM;
+    else
+      MC_UNSET_RAW_MEM;
+    
     return 0;
     
   }
@@ -366,6 +380,7 @@ int rdv_points_compare(xbt_dict_t d1, xbt_dict_t d2){ /* d1 = pair_test, d2 = cu
 
 void set_pair_reached(xbt_state_t st){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
  
   MC_SET_RAW_MEM;
   
@@ -417,12 +432,18 @@ void set_pair_reached(xbt_state_t st){
   xbt_dynar_push(reached_pairs, &pair); 
 
   MC_UNSET_RAW_MEM;
-  
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+    
 }
 
 
 int reached_hash(xbt_state_t st){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
   if(xbt_dynar_is_empty(reached_pairs_hash)){
 
@@ -475,6 +496,12 @@ int reached_hash(xbt_state_t st){
             xbt_dynar_reset(prop_ato);
             xbt_free(prop_ato);
             MC_UNSET_RAW_MEM;
+
+            if(raw_mem_set)
+              MC_SET_RAW_MEM;
+            else
+              MC_UNSET_RAW_MEM;
+            
             return 1;
           }else{
             XBT_INFO("Different snapshot");
@@ -493,12 +520,20 @@ int reached_hash(xbt_state_t st){
     xbt_dynar_reset(prop_ato);
     xbt_free(prop_ato);
     MC_UNSET_RAW_MEM;
+
+    if(raw_mem_set)
+      MC_SET_RAW_MEM;
+    else
+      MC_UNSET_RAW_MEM;
+    
     return 0;
     
   }
 }
 
 void set_pair_reached_hash(xbt_state_t st){
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
  
   MC_SET_RAW_MEM;
 
@@ -534,12 +569,18 @@ void set_pair_reached_hash(xbt_state_t st){
   MC_free_snapshot(sn);
   
   MC_UNSET_RAW_MEM;
-    
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+      
 }
 
 
 int visited(xbt_state_t st, int sc){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
   if(xbt_dynar_is_empty(visited_pairs)){
 
@@ -580,6 +621,11 @@ int visited(xbt_state_t st, int sc){
               xbt_free(prop_ato);
               MC_UNSET_RAW_MEM;
     
+              if(raw_mem_set)
+                MC_SET_RAW_MEM;
+              else
+                MC_UNSET_RAW_MEM;
+              
               return 1;
   
             }else{
@@ -601,6 +647,12 @@ int visited(xbt_state_t st, int sc){
     xbt_dynar_reset(prop_ato);
     xbt_free(prop_ato);
     MC_UNSET_RAW_MEM;
+
+    if(raw_mem_set)
+      MC_SET_RAW_MEM;
+    else
+      MC_UNSET_RAW_MEM;
+    
     return 0;
     
   }
@@ -609,6 +661,7 @@ int visited(xbt_state_t st, int sc){
 
 int visited_hash(xbt_state_t st, int sc){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
   if(xbt_dynar_is_empty(visited_pairs_hash)){
 
@@ -661,6 +714,12 @@ int visited_hash(xbt_state_t st, int sc){
               xbt_dynar_reset(prop_ato);
               xbt_free(prop_ato);
               MC_UNSET_RAW_MEM;
+              
+              if(raw_mem_set)
+                MC_SET_RAW_MEM;
+              else
+                MC_UNSET_RAW_MEM;
+  
               return 1;
             }else{
               //XBT_INFO("Different snapshot");
@@ -682,12 +741,20 @@ int visited_hash(xbt_state_t st, int sc){
     xbt_dynar_reset(prop_ato);
     xbt_free(prop_ato);
     MC_UNSET_RAW_MEM;
+  
+    if(raw_mem_set)
+      MC_SET_RAW_MEM;
+    else
+      MC_UNSET_RAW_MEM;
+  
     return 0;
     
   }
 }
 
 void set_pair_visited_hash(xbt_state_t st, int sc){
+
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
  
   MC_SET_RAW_MEM;
 
@@ -725,10 +792,16 @@ void set_pair_visited_hash(xbt_state_t st, int sc){
   
   MC_UNSET_RAW_MEM;
     
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 }
 
 void set_pair_visited(xbt_state_t st, int sc){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
  
   MC_SET_RAW_MEM;
  
@@ -757,6 +830,10 @@ void set_pair_visited(xbt_state_t st, int sc){
   
   MC_UNSET_RAW_MEM;
   
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
   
 }
 
@@ -826,6 +903,8 @@ mc_pair_stateless_t new_pair_stateless(mc_state_t sg, xbt_state_t st, int r){
 
 void MC_ddfs_init(void){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   XBT_INFO("**************************************************");
   XBT_INFO("Double-DFS init");
   XBT_INFO("**************************************************");
@@ -896,13 +975,21 @@ void MC_ddfs_init(void){
   
       }
     }
-  } 
+  }
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
+  
 
 }
 
 
 void MC_ddfs(int search_cycle){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
   smx_process_t process;
   mc_pair_stateless_t current_pair = NULL;
 
@@ -1276,8 +1363,11 @@ void MC_ddfs(int search_cycle){
     //xbt_dynar_pop(reached_pairs_hash, NULL);
   }
   MC_UNSET_RAW_MEM;
-  
-  
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+  else
+    MC_UNSET_RAW_MEM;
 
 }
 
index 02aa05a..01ad368 100644 (file)
@@ -150,7 +150,9 @@ struct mstats {
 };
 
 #define MC_SET_RAW_MEM    mmalloc_set_current_heap(raw_heap)
-#define MC_UNSET_RAW_MEM    mmalloc_set_current_heap(std_heap)
+#define MC_UNSET_RAW_MEM  mmalloc_set_current_heap(std_heap)
+
+int raw_mem_set;
 
 /******************************* MEMORY MAPPINGS ***************************/
 /* These functions and data structures implements a binary interface for   */