X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/48404c66fc4d8248308db1d1398cb79a6763077e..6981c0be6e073312ee2b00af3697a273b154a587:/src/simix/smx_global.c diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index 6c0623cb71..3b227d7be9 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -124,7 +124,7 @@ static void SIMIX_clean(void) #endif /* Kill everyone (except maestro) */ - SIMIX_process_killall(simix_global->maestro_process); + SIMIX_process_killall(simix_global->maestro_process, 1); /* Exit the SIMIX network module */ SIMIX_network_exit(); @@ -315,6 +315,7 @@ void SIMIX_run(void) timer = xbt_heap_pop(simix_timers); if (timer->func) ((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) { @@ -322,13 +323,23 @@ void SIMIX_run(void) 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 = xbt_swag_extract(set))) { + if (action->data == NULL) + XBT_DEBUG("probably vcpu's action %p, skip", action); + else + SIMIX_simcall_post((smx_action_t) action->data); + } } /* 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) {