X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d740fcc38174fbe1e9c5ec70ac3a15999fd62ac2..97c23c35d161c99ba16870289149a69583e40abc:/src/simix/smx_global.c diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index d91c628130..213b41bf16 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2013. The SimGrid Team. +/* Copyright (c) 2007-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -109,6 +109,7 @@ void SIMIX_global_init(int *argc, char **argv) } SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy); + SIMIX_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, SIMIX_storage_destroy); if (sg_cfg_get_boolean("clean_atexit")) atexit(SIMIX_clean); @@ -163,7 +164,7 @@ static void SIMIX_clean(void) #ifdef TIME_BENCH_AMDAHL xbt_os_cputimer_stop(simix_global->timer_seq); - XBT_INFO("Amdahl timing informations. Sequential time: %lf; Parallel time: %lf", + XBT_INFO("Amdahl timing informations. Sequential time: %f; Parallel time: %f", xbt_os_timer_elapsed(simix_global->timer_seq), xbt_os_timer_elapsed(simix_global->timer_par)); xbt_os_timer_free(simix_global->timer_seq); @@ -214,7 +215,6 @@ void SIMIX_run(void) { double time = 0; smx_process_t process; - xbt_swag_t set; surf_action_t action; smx_timer_t timer; surf_model_t model; @@ -323,14 +323,17 @@ void SIMIX_run(void) ((void (*)(void*))timer->func)(timer->args); xbt_free(timer); } + /* Wake up all processes waiting for a Surf action to finish */ xbt_dynar_foreach(model_list, iter, model) { - set = model->states.failed_action_set; - while ((action = xbt_swag_extract(set))) - SIMIX_simcall_post((smx_action_t) action->data); - set = model->states.done_action_set; - while ((action = xbt_swag_extract(set))) - SIMIX_simcall_post((smx_action_t) action->data); + while ((action = surf_model_extract_failed_action_set(model))) + SIMIX_simcall_post((smx_action_t) surf_action_get_data(action)); + + while ((action = surf_model_extract_done_action_set(model))) + if (surf_action_get_data(action) == NULL) + XBT_DEBUG("probably vcpu's action %p, skip", action); + else + SIMIX_simcall_post((smx_action_t) surf_action_get_data(action)); } /* Autorestart all process */ @@ -346,6 +349,11 @@ void SIMIX_run(void) /* Clean processes to destroy */ SIMIX_process_empty_trash(); + + XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run)); + // !(time == -1.0 && xbt_dynar_is_empty()) + + } while (time != -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run)); if (xbt_swag_size(simix_global->process_list) != 0) {