Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove the fork based checkpoint functionality.
[simgrid.git] / src / mc / mc_global.c
index c4b4b15..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);
@@ -164,7 +104,7 @@ void MC_replay(xbt_fifo_t stack)
     if(saved_req){
       /* because we got a copy of the executed request, we have to fetch the  
          real one, pointed by the request field of the issuer process */
-      req = saved_req->issuer->request;
+      req = &saved_req->issuer->request;
 
       /* Debug information */
       if(XBT_LOG_ISENABLED(mc_global, xbt_log_priority_debug)){
@@ -231,7 +171,7 @@ void MC_wait_for_requests(void)
   do {
     SIMIX_context_runall(simix_global->process_to_run);
     while((req = SIMIX_request_pop())){
-      if(!SIMIX_request_isVisible(req))
+      if(!SIMIX_request_is_visible(req))
         SIMIX_request_pre(req);
       else if(req->call == REQ_COMM_WAITANY)
         THROW_UNIMPLEMENTED;
@@ -260,7 +200,7 @@ void MC_print_statistics(mc_stats_t stats)
 /************************* Assertion Checking *********************************/
 void MC_assert(int prop)
 {
-  if (_surf_do_model_check && !prop) {
+  if (MC_IS_ENABLED && !prop) {
     INFO0("**************************");
     INFO0("*** PROPERTY NOT VALID ***");
     INFO0("**************************");
@@ -283,4 +223,4 @@ void MC_show_deadlock(smx_req_t req)
   xbt_free(req_str);
   INFO0("Counter-example execution trace:");
   MC_dump_stack(mc_stack);
-}
\ No newline at end of file
+}