#include "mc/mc.h"
#include "simgrid/sg_config.h"
+#ifdef HAVE_MC
+#include "mc/mc_private.h"
+#endif
+
+#ifdef HAVE_SMPI
+#include "smpi/private.h"
+#endif
+
XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
"Logging specific to SIMIX (kernel)");
"siginfo = {si_signo = %d, si_errno = %d, si_code = %d, si_addr = %p}\n",
siginfo->si_signo, siginfo->si_errno, siginfo->si_code, siginfo->si_addr);
}
+ } else if (siginfo->si_signo == SIGSEGV) {
+ fprintf(stderr, "Segmentation fault.\n");
+#ifdef HAVE_SMPI
+ if (smpi_enabled() && !smpi_privatize_global_variables) {
+ fprintf(stderr,
+ "Try to enable SMPI variable privatization with --cfg=smpi/privatize_global_variables:yes.\n");
+ }
+#endif
+ }
+#ifdef HAVE_MC
+ if (MC_is_active()) {
+ if (mc_stack) {
+ MC_dump_stack_safety(mc_stack);
+ }
+ MC_print_statistics(mc_stats);
}
+#endif
raise(signum);
}
xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
if (process->simcall.call != SIMCALL_NONE) {
- SIMIX_simcall_pre(&process->simcall, 0);
+ SIMIX_simcall_enter(&process->simcall, 0);
}
}
}
/* Wake up all processes waiting for a Surf action to finish */
xbt_dynar_foreach(model_list, iter, model) {
while ((action = surf_model_extract_failed_action_set(model)))
- SIMIX_simcall_post((smx_action_t) surf_action_get_data(action));
+ SIMIX_simcall_exit((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));
+ SIMIX_simcall_exit((smx_action_t) surf_action_get_data(action));
}
/* Autorestart all process */
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));