Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove the fork based checkpoint functionality.
authorcristianrosa <cristianrosa@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 9 Dec 2010 15:31:10 +0000 (15:31 +0000)
committercristianrosa <cristianrosa@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 9 Dec 2010 15:31:10 +0000 (15:31 +0000)
Use the old one based on snapshots.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9112 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/mc/mc_dpor.c
src/mc/mc_global.c
src/mc/mc_memory.c
src/mc/private.h

index f97fc36..25d9ef2 100644 (file)
@@ -128,7 +128,7 @@ void MC_dpor(void)
       xbt_swag_foreach(process, simix_global->process_list){
       /* FIXME: use REQ_NO_REQ instead of NULL for comparison */
         if(&process->request && !SIMIX_request_is_enabled(&process->request)){
-          *mc_exp_ctl = MC_DEADLOCK;
+          MC_show_deadlock(&process->request);
           return;
         }
       }  
@@ -169,17 +169,16 @@ void MC_dpor(void)
           /* 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));
-          *mc_exp_ctl = MC_EXPLORE;
           MC_UNSET_RAW_MEM;
-          return;
+          MC_replay(mc_stack);
           break;
         } else {
           MC_state_delete(state);
         }
       }
+      MC_UNSET_RAW_MEM;
     }
   }
   MC_UNSET_RAW_MEM;
-  *mc_exp_ctl = MC_STOP;
   return;
 }
index 0dd57b1..2a72f31 100644 (file)
@@ -45,87 +45,29 @@ void MC_init(void)
   mc_setset = xbt_setset_new(20);
 
   /* Add the existing processes to mc's setset so they have an ID designated */
+  /* FIXME: check what happen if there are processes created during the exploration */
   xbt_swag_foreach(process, simix_global->process_list){
     xbt_setset_elm_add(mc_setset, process);
   }
   
-  /* Initialize the control variable */
-  mc_exp_ctl = xbt_new0(e_mc_exp_ctl_t, 1);
-  *mc_exp_ctl = MC_EXPLORE;
-  
-  MC_UNSET_RAW_MEM;
-  
-
+  MC_dpor_init();
 
   /* Save the initial state */
-/*  MC_SET_RAW_MEM;
   initial_snapshot = xbt_new0(s_mc_snapshot_t, 1);
   MC_take_snapshot(initial_snapshot);
-  MC_UNSET_RAW_MEM;*/
+  MC_UNSET_RAW_MEM;
 }
 
 void MC_modelcheck(void)
 {
-  int status;
-  pid_t pid;
-
-  /* Compute initial state */
   MC_init();
-  
-  /* Fork an mc's slave exploration process and wait for it. */
-  /* The forked process will explore a trace until:
-       - a back-tracking point is found (it sets mc_expl_ctl to MC_explore)
-       - there are no more states to explore (it sets mc_expl_ctl to MC_STOP)
-       - a property is invalid (or dead-lock)
-   */
-  while(*mc_exp_ctl == MC_EXPLORE){
-    if((pid = fork())){
-      waitpid(pid, &status, 0);
-      mmalloc_detach(raw_heap);
-      raw_heap = mmalloc_attach(raw_heap_fd, (char*)(std_heap) + STD_HEAP_SIZE + getpagesize());
-
-    if (WIFSIGNALED(status)) {
-      INFO1("killed by signal %d\n", WTERMSIG(status));
-      break;
-    }else if (WIFSTOPPED(status)) {
-      INFO1("stopped by signal %d\n", WSTOPSIG(status));
-      break;
-    }else if (WIFCONTINUED(status)) {
-      INFO0("continued\n");
-      break;
-    }
-     
-    if(*mc_exp_ctl == MC_DEADLOCK){
-      INFO0("**************************");
-      INFO0("*** DEAD-LOCK DETECTED ***");
-      INFO0("**************************");
-      MC_dump_stack(mc_stack);
-      MC_print_statistics(mc_stats);
-      break;
-    }
-      
-    }else{
-      /* if mc_stack is empty then create first state, otherwise replay */
-      if(xbt_fifo_size(mc_stack) == 0)
-        MC_dpor_init();
-      else
-        MC_replay(mc_stack);
-
-      MC_dpor();
-      MC_memory_exit();
-      break;
-    }
-  }    
-  
-  /* If we are the mc's master process then exit */
-  if(pid)
-    MC_exit();
+  MC_dpor();
+  MC_exit();
 }
 
 void MC_exit(void)
 {
-  mmalloc_detach(raw_heap);
-  shm_unlink("raw_heap");
+  MC_memory_exit();
 }
 
 int MC_random(int min, int max)
@@ -149,9 +91,7 @@ void MC_replay(xbt_fifo_t stack)
   DEBUG0("**** Begin Replay ****");
 
   /* Restore the initial state */
-  /*MC_restore_snapshot(initial_snapshot);*/
-
-  MC_wait_for_requests();
+  MC_restore_snapshot(initial_snapshot);
 
   /* Traverse the stack from the initial state and re-execute the transitions */
   for (item = xbt_fifo_get_last_item(stack);
index 769f948..d6a5063 100644 (file)
@@ -23,8 +23,8 @@ void MC_memory_init()
   xbt_assert(std_heap != NULL);
 
 /* Create the second region a page after the first one ends + safety gap */
-  raw_heap_fd = shm_open("raw_heap", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
-  raw_heap = mmalloc_attach(raw_heap_fd, (char*)(std_heap) + STD_HEAP_SIZE + getpagesize());
+/*  raw_heap_fd = shm_open("raw_heap", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);*/
+  raw_heap = mmalloc_attach(-1, (char*)(std_heap) + STD_HEAP_SIZE + getpagesize());
   xbt_assert(raw_heap != NULL);
 }
 
@@ -34,4 +34,4 @@ void MC_memory_exit(void)
 {
   if (raw_heap)
     mmalloc_detach(raw_heap);
-}
\ No newline at end of file
+}
index 48f1ea8..06af6e7 100644 (file)
@@ -42,10 +42,6 @@ void MC_free_snapshot(mc_snapshot_t);
 /* Bound of the MC depth-first search algorithm */
 #define MAX_DEPTH 1000
 
-typedef enum{MC_EXPLORE=0, MC_STOP, MC_DEADLOCK, MC_INVPROP} e_mc_exp_ctl_t;
-
-e_mc_exp_ctl_t *mc_exp_ctl;
-
 void MC_show_stack(xbt_fifo_t stack);
 void MC_dump_stack(xbt_fifo_t stack);
 void MC_replay(xbt_fifo_t stack);