SIMIX_synchro_mallocator_new_f, SIMIX_synchro_mallocator_free_f,
SIMIX_synchro_mallocator_reset_f);
simix_global->autorestart = SIMIX_host_restart_processes;
+ simix_global->mutex = xbt_os_mutex_init();
surf_init(argc, argv); /* Initialize SURF structures */
SIMIX_context_mod_init();
simix_timers = xbt_heap_new(8, &free);
}
- 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);
#ifdef HAVE_MC
- // The communication initialisation is done ASAP.
- // We need to commuicate initialisation of the different layers to the model-checker.
+ // The communication initialization is done ASAP.
+ // We need to communicate initialization of the different layers to the model-checker.
if (mc_mode == MC_MODE_NONE) {
if (getenv(MC_ENV_SOCKET_FD)) {
mc_mode = MC_MODE_CLIENT;
#endif
if (cleaned) return; // to avoid double cleaning by java and C
cleaned = 1;
- /* Kill everyone (except maestro) */
+ XBT_DEBUG("SIMIX_clean called. Simulation's over.");
+ if (!xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() == 0.0) {
+ XBT_CRITICAL(" ");
+ XBT_CRITICAL("The time is still 0, and you still have processes ready to run.");
+ XBT_CRITICAL("It seems that you forgot to run the simulation that you setup.");
+ xbt_die("Bailing out to avoid that stop-before-start madness. Please fix your code.");
+ }
+ /* Kill all processes (but maestro) */
SIMIX_process_killall(simix_global->maestro_process, 1);
/* Exit the SIMIX network module */
simix_global->process_to_destroy = NULL;
xbt_dict_free(&(simix_global->registered_functions));
+ xbt_os_mutex_destroy(simix_global->mutex);
+ simix_global->mutex = NULL;
+
/* Let's free maestro now */
SIMIX_context_free(simix_global->maestro_process->context);
xbt_free(simix_global->maestro_process->running_ctx);
char *hostname = NULL;
xbt_dynar_foreach(host_that_restart,iter,hostname) {
XBT_INFO("Restart processes on host: %s",hostname);
- SIMIX_host_autorestart(SIMIX_host_get_by_name(hostname));
+ SIMIX_host_autorestart(sg_host_by_name(hostname));
}
xbt_dynar_reset(host_that_restart);
}
break;
}
XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish",
- process->pid, process->name, sg_host_name(process->smx_host),
+ process->pid, process->name, sg_host_name(process->host),
synchro_description, process->waiting_synchro,
process->waiting_synchro->name, (int)process->waiting_synchro->state);
}
else {
- XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->smx_host));
+ XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->host));
}
}
}