X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/faadab8061f6f30c378abc524b586b76381ef7c6..e51ea751d20f2437b9b350a3bab1db3c257fb54f:/src/simix/smx_global.c diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index ed61f4f513..0de13d2811 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -12,14 +12,7 @@ #include "xbt/ex.h" /* ex_backtrace_display */ #include "mc/mc.h" -XBT_LOG_EXTERNAL_CATEGORY(simix); -XBT_LOG_EXTERNAL_CATEGORY(simix_action); -XBT_LOG_EXTERNAL_CATEGORY(simix_deployment); -XBT_LOG_EXTERNAL_CATEGORY(simix_environment); -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_CATEGORY(simix, "All SIMIX categories"); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix, "Logging specific to SIMIX (kernel)"); @@ -66,16 +59,6 @@ void SIMIX_global_init(int *argc, char **argv) s_smx_process_t proc; if (!simix_global) { - /* Connect our log channels: that must be done manually under windows */ - XBT_LOG_CONNECT(simix_action, simix); - XBT_LOG_CONNECT(simix_deployment, simix); - XBT_LOG_CONNECT(simix_environment, simix); - XBT_LOG_CONNECT(simix_host, simix); - 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_smx_global_t, 1); simix_global->process_to_run = xbt_dynar_new(sizeof(smx_process_t), NULL); @@ -182,6 +165,19 @@ XBT_INLINE double SIMIX_get_clock(void) } } +static int process_syscall_color(void *p) +{ + switch ((*(smx_process_t *)p)->simcall.call) { + case SIMCALL_NONE: + case SIMCALL_PROCESS_KILL: + return 2; + case SIMCALL_PROCESS_RESUME: + return 1; + default: + return 0; + } +} + void SIMIX_run(void) { double time = 0; @@ -202,6 +198,7 @@ void SIMIX_run(void) XBT_DEBUG("New Sub-Schedule Round; size(queue)=%lu", xbt_dynar_length(simix_global->process_to_run)); SIMIX_process_runall(); + xbt_dynar_three_way_partition(simix_global->process_that_ran, process_syscall_color); xbt_dynar_foreach(simix_global->process_that_ran, iter, process) { if (process->simcall.call != SIMCALL_NONE) { SIMIX_simcall_pre(&process->simcall, 0);