Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : fix dpor
[simgrid.git] / src / mc / mc_dpor.c
index aebfaa1..c52988b 100644 (file)
@@ -28,7 +28,7 @@ static void visited_state_free_voidp(void *s){
 static int is_visited_state(){
 
   if(_sg_mc_visited == 0)
-    return 0;
+    return -1;
 
   int raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
 
@@ -249,6 +249,8 @@ void MC_dpor(void)
         XBT_DEBUG("Execute: %s", req_str);
         xbt_free(req_str);
       }
+        
+      req_str = MC_request_get_dot_output(req, value);
 
       MC_state_set_executed_request(state, req, value);
       mc_stats->executed_transitions++;
@@ -310,11 +312,23 @@ void MC_dpor(void)
           next_state->system_state = MC_take_snapshot();
         }
 
+        if(dot_output != NULL)
+          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str);
+
+      }else{
+
+        if(dot_output != NULL)
+          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visited_state, req_str);
+
       }
 
+      
+
       xbt_fifo_unshift(mc_stack_safety, next_state);
       MC_UNSET_RAW_MEM;
 
+      xbt_free(req_str);
+
       /* Let's loop again */
 
       /* The interleave set is empty or the maximum depth is reached, let's back-track */