#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");
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
}
}