Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
merge branches
[simgrid.git] / src / mc / mc_dpor.c
index bc37c91..074570b 100644 (file)
@@ -23,8 +23,8 @@ void MC_dpor_init()
   xbt_fifo_unshift(mc_stack, initial_state);
   MC_UNSET_RAW_MEM;
 
-  DEBUG0("**************************************************");
-  DEBUG0("Initial state");
+  XBT_DEBUG("**************************************************");
+  XBT_DEBUG("Initial state");
 
   /* Wait for requests (schedules processes) */
   MC_wait_for_requests();
@@ -32,7 +32,7 @@ void MC_dpor_init()
   MC_SET_RAW_MEM;
   /* Get an enabled process and insert it in the interleave set of the initial state */
   xbt_swag_foreach(process, simix_global->process_list){
-    if(SIMIX_process_is_enabled(process)){
+    if(MC_process_is_enabled(process)){
       MC_state_interleave_process(initial_state, process);
       break;
     }
@@ -52,8 +52,8 @@ void MC_dpor_init()
 void MC_dpor(void)
 {
   char *req_str;
-  unsigned int value;
-  smx_req_t req = NULL;
+  int value;
+  smx_req_t req = NULL, prev_req = NULL;
   mc_state_t state = NULL, prev_state = NULL, next_state = NULL;
   smx_process_t process = NULL;
   xbt_fifo_item_t item = NULL;
@@ -64,8 +64,8 @@ void MC_dpor(void)
     state = (mc_state_t) 
       xbt_fifo_get_item_content(xbt_fifo_get_first_item(mc_stack));
 
-    DEBUG0("**************************************************");
-    DEBUG3("Exploration detph=%d (state=%p)(%u interleave)",
+    XBT_DEBUG("**************************************************");
+    XBT_DEBUG("Exploration detph=%d (state=%p)(%u interleave)",
            xbt_fifo_size(mc_stack), state,
            MC_state_interleave_size(state));
 
@@ -79,8 +79,8 @@ void MC_dpor(void)
 
       /* Debug information */
       if(XBT_LOG_ISENABLED(mc_dpor, xbt_log_priority_debug)){
-        req_str = MC_request_to_string(req);
-        DEBUG2("Execute: %s (%u)", req_str, value);
+        req_str = MC_request_to_string(req, value);
+        XBT_DEBUG("Execute: %s", req_str);
         xbt_free(req_str);
       }
 
@@ -98,10 +98,9 @@ void MC_dpor(void)
       next_state = MC_state_new();
       xbt_fifo_unshift(mc_stack, next_state);
 
-
       /* Get an enabled process and insert it in the interleave set of the next state */
       xbt_swag_foreach(process, simix_global->process_list){
-        if(SIMIX_process_is_enabled(process)){
+        if(MC_process_is_enabled(process)){
           MC_state_interleave_process(next_state, process);
           break;
         }
@@ -116,19 +115,21 @@ void MC_dpor(void)
 
       /* The interleave set is empty or the maximum depth is reached, let's back-track */
     } else {
-      DEBUG0("There are no more processes to interleave.");
+      XBT_DEBUG("There are no more processes to interleave.");
+
+      /* Trash the current state, no longer needed */
+      MC_SET_RAW_MEM;
+      xbt_fifo_shift(mc_stack);
+      MC_state_delete(state);
+      MC_UNSET_RAW_MEM;
 
       /* Check for deadlocks */
       if(MC_deadlock_check()){
-        MC_show_deadlock(&process->request);
+        MC_show_deadlock(NULL);
         return;
       }
 
-      /* Trash the current state, no longer needed */
       MC_SET_RAW_MEM;
-      xbt_fifo_shift(mc_stack);
-      MC_state_delete(state);
-
       /* Traverse the stack backwards until a state with a non empty interleave
          set is found, deleting all the states that have it empty in the way.
          For each deleted state, check if the request that has generated it 
@@ -136,23 +137,25 @@ void MC_dpor(void)
          executed before it. If it does then add it to the interleave set of the
          state that executed that previous request. */
       while ((state = xbt_fifo_shift(mc_stack)) != NULL) {
-        req = MC_state_get_executed_request(state, &value);
+        req = MC_state_get_internal_request(state);
         xbt_fifo_foreach(mc_stack, item, prev_state, mc_state_t) {
-          if(MC_request_depend(req, MC_state_get_executed_request(prev_state, &value))){
+          if(MC_request_depend(req, MC_state_get_internal_request(prev_state))){
             if(XBT_LOG_ISENABLED(mc_dpor, xbt_log_priority_debug)){
-              DEBUG0("Dependent Transitions:");
-              req_str = MC_request_to_string(MC_state_get_executed_request(prev_state, &value));
-              DEBUG2("%s (state=%p)", req_str, prev_state);
+              XBT_DEBUG("Dependent Transitions:");
+              prev_req = MC_state_get_executed_request(prev_state, &value);
+              req_str = MC_request_to_string(prev_req, value);
+              XBT_DEBUG("%s (state=%p)", req_str, prev_state);
               xbt_free(req_str);
-              req_str = MC_request_to_string(req);
-              DEBUG2("%s (state=%p)", req_str, state);
+              prev_req = MC_state_get_executed_request(state, &value);
+              req_str = MC_request_to_string(prev_req, value);
+              XBT_DEBUG("%s (state=%p)", req_str, state);
               xbt_free(req_str);              
             }
 
             if(!MC_state_process_is_done(prev_state, req->issuer))
               MC_state_interleave_process(prev_state, req->issuer);
             else
-              DEBUG1("Process %p is in done set", req->issuer);
+              XBT_DEBUG("Process %p is in done set", req->issuer);
 
             break;
           }
@@ -160,7 +163,7 @@ void MC_dpor(void)
         if (MC_state_interleave_size(state)) {
           /* We found a back-tracking point, let's loop */
           xbt_fifo_unshift(mc_stack, state);
-          DEBUG1("Back-tracking to depth %d", xbt_fifo_size(mc_stack));
+          XBT_DEBUG("Back-tracking to depth %d", xbt_fifo_size(mc_stack));
           MC_UNSET_RAW_MEM;
           MC_replay(mc_stack);
           break;