#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)");
static void _XBT_CALL inthandler(int ignored)
{
if ( _sg_do_verbose_exit ) {
- XBT_INFO("CTRL-C pressed. Displaying status and bailing out");
+ XBT_INFO("CTRL-C pressed. The current status will be displayed before exit (disable that behavior with option 'verbose-exit').");
SIMIX_display_process_status();
}
else {
- XBT_INFO("CTRL-C pressed. bailing out without displaying because verbose-exit is disabled");
+ XBT_INFO("CTRL-C pressed, exiting. Hiding the current process status since 'verbose-exit' is set to false.");
}
exit(1);
}
+#ifndef WIN32
static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
{
if (siginfo->si_signo == SIGSEGV && siginfo->si_code == SEGV_ACCERR) {
fprintf(stderr,
- "Access violation detected. This can result from a stack overflow.\n"
+ "Access violation detected.\n"
+ "This can result from a programming error in your code or, although less likely,\n"
+ "from a bug in SimGrid itself. This can also be the sign of a bug in the OS or\n"
+ "in third-party libraries. Failing hardware can sometimes generate such errors\n"
+ "too.\n"
+ "Finally, if nothing of the above applies, this can result from a stack overflow.\n"
"Try to increase stack size with --cfg=contexts/stack_size (current size is %d KiB).\n",
smx_context_stack_size / 1024);
if (XBT_LOG_ISENABLED(simix_kernel, xbt_log_priority_debug)) {
"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_variable: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);
}
}
}
+#endif
/********************************* SIMIX **************************************/
XBT_INLINE double SIMIX_timer_next(void)
/* Prepare to display some more info when dying on Ctrl-C pressing */
signal(SIGINT, inthandler);
+#ifndef WIN32
/* Install SEGV handler */
install_segvhandler();
-
+#endif
/* register a function to be called by SURF after the environment creation */
sg_platf_init();
sg_platf_postparse_add_cb(SIMIX_post_create_environment);
*
* This functions remove the memory used by SIMIX
*/
-int cleaned = 0;
void SIMIX_clean(void)
{
+ static int cleaned = 0;
#ifdef TIME_BENCH_PER_SR
smx_ctx_raw_new_sr();
#endif
action_description = "sleeping";
break;
+ case SIMIX_ACTION_JOIN:
+ action_description = "joining";
+ break;
+
case SIMIX_ACTION_SYNCHRO:
action_description = "synchronization";
break;