XBT_LOG_EXTERNAL_CATEGORY(simix_host);
XBT_LOG_EXTERNAL_CATEGORY(simix_process);
XBT_LOG_EXTERNAL_CATEGORY(simix_synchro);
+XBT_LOG_EXTERNAL_CATEGORY(simix_context);
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
"Logging specific to SIMIX (kernel)");
XBT_LOG_CONNECT(simix_kernel, simix);
XBT_LOG_CONNECT(simix_process, simix);
XBT_LOG_CONNECT(simix_synchro, simix);
+ XBT_LOG_CONNECT(simix_context, simix);
simix_global = xbt_new0(s_SIMIX_Global_t, 1);
/**
* \brief Kill all running process
- *
+ * Only maestro can kill everyone :)
*/
void SIMIX_process_killall()
{
smx_process_t p = NULL;
- smx_process_t self = SIMIX_process_self();
+ xbt_assert0((simix_global->current_process == simix_global->maestro_process),
+ "You are not supposed to run this function here!");
- while ((p = xbt_swag_extract(simix_global->process_list))) {
- if (p != self)
- SIMIX_process_kill(p);
- }
+ while ((p = xbt_swag_extract(simix_global->process_list)))
+ SIMIX_process_kill(p);
- SIMIX_context_empty_trash();
-
- if (self != simix_global->maestro_process) {
- SIMIX_context_yield();
- }
+ SIMIX_process_empty_trash();
return;
}
xbt_swag_free(simix_global->process_to_destroy);
xbt_swag_free(simix_global->process_list);
simix_global->process_list = NULL;
+ simix_global->process_to_destroy = NULL;
xbt_dict_free(&(simix_global->registered_functions));
xbt_dict_free(&(simix_global->host));
/* Let's free maestro now */
- SIMIX_context_free(simix_global->maestro_process);
- free(simix_global->maestro_process);
-
+ SIMIX_context_free(simix_global->maestro_process->context);
+ free(simix_global->maestro_process);
+ simix_global->maestro_process = NULL;
+
/* Finish context module and SURF */
SIMIX_context_mod_exit();
surf_exit();
double elapsed_time = 0.0;
static int state_modifications = 1;
- SIMIX_context_empty_trash();
+ SIMIX_process_empty_trash();
if (xbt_swag_size(simix_global->process_to_run) && (elapsed_time > 0)) {
DEBUG0("**************************************************");
}
while ((process = xbt_swag_extract(simix_global->process_to_run))) {
DEBUG2("Scheduling %s on %s", process->name, process->smx_host->name);
- SIMIX_context_schedule(process);
+ __SIMIX_process_schedule(process);
}
{