Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make sure some paranoid compilers don't choke on our example (unused variable globalc...
[simgrid.git] / src / xbt / ex.c
index 907d73e..598fbf9 100644 (file)
@@ -48,7 +48,7 @@ void xbt_backtrace_display(void) {
   e.remote=0;
   xbt_ex_free(e);
 #else 
   e.remote=0;
   xbt_ex_free(e);
 #else 
-  fprintf(stderr,"No backtrace on this arch");
+  ERROR0("No backtrace on this arch");
 #endif
 }
 
 #endif
 }
 
@@ -147,12 +147,15 @@ void xbt_ex_setup_backtrace(xbt_ex_t *e)  {
        DEBUG4("%#lx %s [%#lx-%#lx]",
               addr, found? "in":"out of",first,last);
       }
        DEBUG4("%#lx %s [%#lx-%#lx]",
               addr, found? "in":"out of",first,last);
       }
-      if (!found) 
-       CRITICAL0("Problem while reading the maps file");
-
       fclose(maps);
       free(maps_name);
 
       fclose(maps);
       free(maps_name);
 
+      if (!found) {
+       WARN0("Problem while reading the maps file");
+       e->bt_strings[i] = bprintf("**   In ?? (%s)", backtrace[i]);
+       continue;
+      }
+
       /* Ok, Found the offset of the maps line containing the searched symbol. 
         We now need to substract this from the address we got from backtrace.
       */
       /* Ok, Found the offset of the maps line containing the searched symbol. 
         We now need to substract this from the address we got from backtrace.
       */
@@ -209,10 +212,11 @@ void xbt_ex_display(xbt_ex_t *e)  {
   if (e->remote)
     bprintf(" on host %s(%ld)",e->host,e->pid);
 
   if (e->remote)
     bprintf(" on host %s(%ld)",e->host,e->pid);
 
+  CRITICAL1("%s",e->msg);
   fprintf(stderr,
          "** SimGrid: UNCAUGHT EXCEPTION received on %s(%ld): category: %s; value: %d\n"
          "** %s\n"
   fprintf(stderr,
          "** SimGrid: UNCAUGHT EXCEPTION received on %s(%ld): category: %s; value: %d\n"
          "** %s\n"
-         "** Thrown by %s()%s",
+         "** Thrown by %s()%s\n",
          gras_os_myname(),gras_os_getpid(),
          xbt_ex_catname(e->category), e->value, e->msg,
          e->procname,thrower?thrower:" in this process");
          gras_os_myname(),gras_os_getpid(),
          xbt_ex_catname(e->category), e->value, e->msg,
          e->procname,thrower?thrower:" in this process");
@@ -450,9 +454,10 @@ static void bad_example(void) {
   /* end_of_bad_example */
 }
 #endif
   /* end_of_bad_example */
 }
 #endif
-
+typedef struct {char *first;} global_context_t;
+   
 static void good_example(void) {
 static void good_example(void) {
-  struct {char*first;} *globalcontext;
+  global_context_t *global_context=malloc(sizeof(global_context_t));
   xbt_ex_t ex;
 
   /* GOOD_EXAMPLE */
   xbt_ex_t ex;
 
   /* GOOD_EXAMPLE */
@@ -462,7 +467,7 @@ static void good_example(void) {
     char * volatile /*03*/ cp3 = NULL /*02*/;
     TRY {
       cp1 = mallocex(SMALLAMOUNT);
     char * volatile /*03*/ cp3 = NULL /*02*/;
     TRY {
       cp1 = mallocex(SMALLAMOUNT);
-      globalcontext->first = cp1;
+      global_context->first = cp1;
       cp1 = NULL /*05 give away*/;
       cp2 = mallocex(TOOBIG);
       cp3 = mallocex(SMALLAMOUNT);
       cp1 = NULL /*05 give away*/;
       cp2 = mallocex(TOOBIG);
       cp3 = mallocex(SMALLAMOUNT);