X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d6b585e44bd28ba41f3faae4a99b602290f16434..f53ee0c4bdeaffa3c7a781f45f640e5f32cbb480:/src/mc/mc_global.c diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index 81a1b206d1..e924d16857 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -55,7 +55,8 @@ void MC_init(int method) MC_UNSET_RAW_MEM; } -void MC_modelcheck(int method){ +void MC_modelcheck(int method) +{ MC_init(method); @@ -69,17 +70,41 @@ void MC_modelcheck(int method){ default: break; } + + MC_exit(method); } -int MC_random(int min, int max) +void MC_exit(int method) { - MC_random_create(min,max); - SIMIX_process_yield(); + mc_state_t state; + + switch(method){ + case 0: + //MC_dfs_exit(); + break; + case 1: + //MC_dpor_exit(); + break; + default: + break; + } + + /* Destroy MC data structures (in RAW memory) */ + MC_SET_RAW_MEM; + xbt_free(mc_stats); + + while( (state = (mc_state_t)xbt_fifo_pop(mc_stack)) != NULL ) + MC_state_delete(state); + + xbt_fifo_free(mc_stack); + xbt_setset_destroy(mc_setset); + MC_UNSET_RAW_MEM; +} - if(!mc_replay_mode) - return mc_current_state->executed_transition->current_value; - else - return mc_current_state->executed_transition->current_value - 1; +int MC_random(int min, int max) +{ + MC_trans_intercept_random(min, max); + return mc_current_state->executed_transition->random.value; } /** @@ -134,16 +159,12 @@ void MC_replay(xbt_fifo_t stack) void MC_dump_stack(xbt_fifo_t stack) { mc_state_t state; - mc_transition_t trans; + MC_show_stack(stack); + MC_SET_RAW_MEM; - while( (state = (mc_state_t)xbt_fifo_pop(stack)) != NULL ){ - trans = state->executed_transition; - if(trans) - INFO1("%s", trans->name); - + while( (state = (mc_state_t)xbt_fifo_pop(stack)) != NULL ) MC_state_delete(state); - } MC_UNSET_RAW_MEM; } @@ -153,9 +174,8 @@ void MC_show_stack(xbt_fifo_t stack) mc_transition_t trans; xbt_fifo_item_t item; - INFO0("==========================="); for(item=xbt_fifo_get_last_item(stack); - (item?(state=(mc_state_t)(xbt_fifo_get_item_content(item))):(NULL)); \ + (item?(state=(mc_state_t)(xbt_fifo_get_item_content(item))):(NULL)); item=xbt_fifo_get_prev_item(item)){ trans = state->executed_transition; if(trans){ @@ -164,7 +184,6 @@ void MC_show_stack(xbt_fifo_t stack) } } - /** * \brief Schedules all the process that are ready to run * As a side effect it performs some clean-up required by SIMIX @@ -192,6 +211,7 @@ mc_state_t MC_state_new(void) mc_state_t state = NULL; state = xbt_new0(s_mc_state_t, 1); + state->created_transitions = xbt_setset_new_set(mc_setset); state->transitions = xbt_setset_new_set(mc_setset); state->enabled_transitions = xbt_setset_new_set(mc_setset); state->interleave = xbt_setset_new_set(mc_setset); @@ -208,8 +228,15 @@ mc_state_t MC_state_new(void) */ void MC_state_delete(mc_state_t state) { - /*if(state->executed_transition) - MC_transition_delete(state->executed_transition);*/ + xbt_setset_cursor_t cursor; + mc_transition_t trans; + + xbt_setset_foreach(state->created_transitions, cursor, trans){ + xbt_setset_elm_remove(mc_setset, trans); + MC_transition_delete(trans); + } + + xbt_setset_destroy_set(state->created_transitions); xbt_setset_destroy_set(state->transitions); xbt_setset_destroy_set(state->enabled_transitions); xbt_setset_destroy_set(state->interleave); @@ -244,12 +271,7 @@ void MC_execute_surf_actions(void) DEBUG5("Resource [%s] (%d): Executing RUNNING action \"%s\" (%p) MaxDuration %lf", model->name, xbt_swag_size(model->states.running_action_set), smx_action->name, smx_action, action->max_duration); - - /* Copy the transfered data of the completed network actions */ - /* FIXME: be carefull it might not be an action of the network model */ - if(smx_action && smx_action->data != NULL) - SIMIX_network_copy_data((smx_comm_t)smx_action->data); - + if(smx_action) SIMIX_action_signal_all(smx_action); }