X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b48a2fd4e7621cbc0f96e39bf7db3a0263232908..51a5195725c4c524ee5e84d8bab016472a539617:/src/gras/gras.c diff --git a/src/gras/gras.c b/src/gras/gras.c index 35b79801e1..28a5ead0d7 100644 --- a/src/gras/gras.c +++ b/src/gras/gras.c @@ -17,11 +17,29 @@ #include "gras.h" #include "gras/process.h" /* FIXME: killme and put process_init in modinter */ -#include "portable.h" /* hexa_*() */ +#include "portable.h" /* hexa_*(); signalling stuff */ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras,XBT_LOG_ROOT_CAT,"All GRAS categories (cf. section \ref GRAS_API)"); static int gras_running_process = 0; +#if defined(HAVE_SIGNAL) && defined(HAVE_SIGNAL_H) +static void gras_sigusr_handler(int sig) { + INFO0("SIGUSR1 received. Display the backtrace"); + xbt_backtrace_display(); +} + +static void gras_sigint_handler(int sig) { + static double lastone = 0; + if (lastone == 0 || gras_os_time() - lastone > 5) { + lastone = gras_os_time(); + xbt_backtrace_display(); + fprintf(stderr,"\nBacktrace displayed because Ctrl-C was pressed. Press again (within 5 sec) to abort the process.\n"); + } else { + exit(1); + } +} +#endif + void gras_init(int *argc,char **argv) { VERB0("Initialize GRAS"); @@ -50,6 +68,10 @@ void gras_init(int *argc,char **argv) { gras_msg_init(); gras_trp_init(); gras_datadesc_init(); +#if defined(HAVE_SIGNAL) && defined(HAVE_SIGNAL_H) + signal(SIGUSR1,gras_sigusr_handler); + signal(SIGINT,gras_sigint_handler); +#endif } }