X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/66b0686fe441796325c3b5738b1b880d15ce1ea6..76936ddebd0a514a3259454d475b254ce40947b3:/src/xbt/backtrace_linux.c diff --git a/src/xbt/backtrace_linux.c b/src/xbt/backtrace_linux.c index e57e486018..966070ad62 100644 --- a/src/xbt/backtrace_linux.c +++ b/src/xbt/backtrace_linux.c @@ -28,6 +28,12 @@ void xbt_backtrace_postexit(void) void xbt_backtrace_current(xbt_ex_t * e) { e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE); + if (e->used == 0) { + fprintf(stderr, "The backtrace() function failed, which probably means that the memory is exhausted. Here is a crude dump of the exception that I was trying to build:"); + fprintf(stderr, "%s:%s(%d) [%s:%d] %s", e->host,e->procname,e->pid, e->file,e->line,e->msg); + fprintf(stderr, "Bailing out now since there is nothing I can do without a decent amount of memory. Please go fix the memleaks\n"); + exit(1); + } } @@ -86,8 +92,7 @@ void xbt_ex_setup_backtrace(xbt_ex_t * e) char *data; xbt_dynar_foreach(path, cpt, data) { - if (binary_name) - free(binary_name); + free(binary_name); binary_name = bprintf("%s/%s", data, xbt_binary_name); if (!stat(binary_name, &stat_buf)) { /* Found. */