From: cristianrosa Date: Thu, 9 Dec 2010 15:31:10 +0000 (+0000) Subject: Remove the fork based checkpoint functionality. X-Git-Tag: v3.6_beta2~811 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/cd8852187f491f7fa8049414d7ac2d0193518e23 Remove the fork based checkpoint functionality. 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 --- diff --git a/src/mc/mc_dpor.c b/src/mc/mc_dpor.c index f97fc36e22..25d9ef2735 100644 --- a/src/mc/mc_dpor.c +++ b/src/mc/mc_dpor.c @@ -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; } diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 0dd57b1c95..2a72f31351 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -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); diff --git a/src/mc/mc_memory.c b/src/mc/mc_memory.c index 769f948288..d6a5063b7e 100644 --- a/src/mc/mc_memory.c +++ b/src/mc/mc_memory.c @@ -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 +} diff --git a/src/mc/private.h b/src/mc/private.h index 48f1ea8381..06af6e7c14 100644 --- a/src/mc/private.h +++ b/src/mc/private.h @@ -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);