Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cosmetics: fix comment.
[simgrid.git] / src / xbt / ex.c
index 35b8b27..7f46a21 100644 (file)
@@ -66,7 +66,7 @@
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_ex, xbt, "Exception mecanism");
 
 /* default __ex_ctx callback function */
-ex_ctx_t *__xbt_ex_ctx_default(void)
+xbt_running_ctx_t *__xbt_ex_ctx_default(void)
 {
   /* Don't scream: this is a default which is never used (so, yes,
      there is one setjump container by running entity).
@@ -78,7 +78,7 @@ ex_ctx_t *__xbt_ex_ctx_default(void)
      It also gets overriden in xbt/context.c when using ucontextes (as well as
      in Java for now, but after the java overhaul, it will get cleaned out)
    */
-  static ex_ctx_t ctx = XBT_CTX_INITIALIZER;
+  static xbt_running_ctx_t ctx = XBT_RUNNING_CTX_INITIALIZER;
 
   return &ctx;
 }
@@ -98,7 +98,7 @@ void xbt_backtrace_display(xbt_ex_t * e)
 
     fprintf(stderr, "Backtrace (displayed in thread %p):\n",
             (void *) xbt_thread_self());
-    for (i = 1; i < e->used; i++)       /* no need to display "xbt_display_backtrace" */
+    for (i = 1; i < e->used; i++)       /* no need to display "xbt_backtrace_display" */
       fprintf(stderr, "---> %s\n", e->bt_strings[i] + 4);
   }
 
@@ -108,7 +108,7 @@ void xbt_backtrace_display(xbt_ex_t * e)
   xbt_ex_free(*e);
 #else
 
-  ERROR0("No backtrace on this arch");
+  XBT_ERROR("No backtrace on this arch");
 #endif
 }
 
@@ -143,7 +143,7 @@ void xbt_ex_display(xbt_ex_t * e)
           gras_os_myname(), (*xbt_getpid) (),
           xbt_ex_catname(e->category), e->value, e->msg,
           e->procname, thrower ? thrower : " in this process");
-  CRITICAL1("%s", e->msg);
+  XBT_CRITICAL("%s", e->msg);
 
   if (!e->remote && !e->bt_strings)
     xbt_ex_setup_backtrace(e);
@@ -153,6 +153,10 @@ void xbt_ex_display(xbt_ex_t * e)
   {
     int i;
 
+    if (!xbt_binary_name) {
+      fprintf(stderr, "variable 'xbt_binary_name' set to NULL. Cannot compute the backtrace\n");
+      return;
+    }
     fprintf(stderr, "\n");
     for (i = 0; i < e->used; i++)
       fprintf(stderr, "%s\n", e->bt_strings[i]);
@@ -174,7 +178,7 @@ void __xbt_ex_terminate_default(xbt_ex_t * e)
 }
 
 /* the externally visible API */
-XBT_EXPORT_NO_IMPORT(ex_ctx_cb_t) __xbt_ex_ctx = &__xbt_ex_ctx_default;
+XBT_EXPORT_NO_IMPORT(xbt_running_ctx_fetcher_t) __xbt_running_ctx_fetch = &__xbt_ex_ctx_default;
 XBT_EXPORT_NO_IMPORT(ex_term_cb_t) __xbt_ex_terminate =
     &__xbt_ex_terminate_default;
 
@@ -237,48 +241,48 @@ XBT_TEST_UNIT("controlflow", test_controlflow, "basic nested control flow")
   xbt_ex_t ex;
   volatile int n = 1;
 
-  xbt_test_add0("basic nested control flow");
+  xbt_test_add("basic nested control flow");
 
   TRY {
     if (n != 1)
-      xbt_test_fail1("M1: n=%d (!= 1)", n);
+      xbt_test_fail("M1: n=%d (!= 1)", n);
     n++;
     TRY {
       if (n != 2)
-        xbt_test_fail1("M2: n=%d (!= 2)", n);
+        xbt_test_fail("M2: n=%d (!= 2)", n);
       n++;
-      THROW0(unknown_error, 0, "something");
+      THROWF(unknown_error, 0, "something");
     }
     CATCH(ex) {
       if (n != 3)
-        xbt_test_fail1("M3: n=%d (!= 3)", n);
+        xbt_test_fail("M3: n=%d (!= 3)", n);
       n++;
       xbt_ex_free(ex);
     }
     n++;
     TRY {
       if (n != 5)
-        xbt_test_fail1("M2: n=%d (!= 5)", n);
+        xbt_test_fail("M2: n=%d (!= 5)", n);
       n++;
-      THROW0(unknown_error, 0, "something");
+      THROWF(unknown_error, 0, "something");
     }
-    CATCH(ex) {
+    CATCH_ANONYMOUS {
       if (n != 6)
-        xbt_test_fail1("M3: n=%d (!= 6)", n);
+        xbt_test_fail("M3: n=%d (!= 6)", n);
       n++;
       RETHROW;
       n++;
     }
-    xbt_test_fail1("MX: n=%d (shouldn't reach this point)", n);
+    xbt_test_fail("MX: n=%d (shouldn't reach this point)", n);
   }
   CATCH(ex) {
     if (n != 7)
-      xbt_test_fail1("M4: n=%d (!= 7)", n);
+      xbt_test_fail("M4: n=%d (!= 7)", n);
     n++;
     xbt_ex_free(ex);
   }
   if (n != 8)
-    xbt_test_fail1("M5: n=%d (!= 8)", n);
+    xbt_test_fail("M5: n=%d (!= 8)", n);
 }
 
 XBT_TEST_UNIT("value", test_value, "exception value passing")
@@ -286,16 +290,16 @@ XBT_TEST_UNIT("value", test_value, "exception value passing")
   xbt_ex_t ex;
 
   TRY {
-    THROW0(unknown_error, 2, "toto");
+    THROWF(unknown_error, 2, "toto");
   }
   CATCH(ex) {
-    xbt_test_add0("exception value passing");
+    xbt_test_add("exception value passing");
     if (ex.category != unknown_error)
-      xbt_test_fail1("category=%d (!= 1)", ex.category);
+      xbt_test_fail("category=%d (!= 1)", ex.category);
     if (ex.value != 2)
-      xbt_test_fail1("value=%d (!= 2)", ex.value);
+      xbt_test_fail("value=%d (!= 2)", ex.value);
     if (strcmp(ex.msg, "toto"))
-      xbt_test_fail1("message=%s (!= toto)", ex.msg);
+      xbt_test_fail("message=%s (!= toto)", ex.msg);
     xbt_ex_free(ex);
   }
 }
@@ -310,16 +314,17 @@ XBT_TEST_UNIT("variables", test_variables, "variable value preservation")
   TRY {
     r2 = 5678;
     v2 = 5678;
-    THROW0(unknown_error, 0, "toto");
-  } CATCH(ex) {
-    xbt_test_add0("variable preservation");
+    THROWF(unknown_error, 0, "toto");
+  }
+  CATCH(ex) {
+    xbt_test_add("variable preservation");
     if (r1 != 1234)
-      xbt_test_fail1("r1=%d (!= 1234)", r1);
+      xbt_test_fail("r1=%d (!= 1234)", r1);
     if (v1 != 1234)
-      xbt_test_fail1("v1=%d (!= 1234)", v1);
+      xbt_test_fail("v1=%d (!= 1234)", v1);
     /* r2 is allowed to be destroyed because not volatile */
     if (v2 != 5678)
-      xbt_test_fail1("v2=%d (!= 5678)", v2);
+      xbt_test_fail("v2=%d (!= 5678)", v2);
     xbt_ex_free(ex);
   }
 }
@@ -330,27 +335,28 @@ XBT_TEST_UNIT("cleanup", test_cleanup, "cleanup handling")
   volatile int v1;
   int c;
 
-  xbt_test_add0("cleanup handling");
+  xbt_test_add("cleanup handling");
 
   v1 = 1234;
   c = 0;
   TRY {
     v1 = 5678;
-    THROW0(1, 2, "blah");
-  } TRY_CLEANUP {
+    THROWF(1, 2, "blah");
+  }
+  TRY_CLEANUP {
     if (v1 != 5678)
-      xbt_test_fail1("v1 = %d (!= 5678)", v1);
+      xbt_test_fail("v1 = %d (!= 5678)", v1);
     c = 1;
   }
   CATCH(ex) {
     if (v1 != 5678)
-      xbt_test_fail1("v1 = %d (!= 5678)", v1);
+      xbt_test_fail("v1 = %d (!= 5678)", v1);
     if (!(ex.category == 1 && ex.value == 2 && !strcmp(ex.msg, "blah")))
-      xbt_test_fail0("unexpected exception contents");
+      xbt_test_fail("unexpected exception contents");
     xbt_ex_free(ex);
   }
   if (!c)
-    xbt_test_fail0("xbt_ex_free not executed");
+    xbt_test_fail("xbt_ex_free not executed");
 }
 
 
@@ -385,7 +391,8 @@ static void bad_example(void)
     cp3 = mallocex(SMALLAMOUNT);
     strcpy(cp1, "foo");
     strcpy(cp2, "bar");
-  } TRY_CLEANUP {
+  }
+  TRY_CLEANUP {
     if (cp3 != NULL)
       free(cp3);
     if (cp2 != NULL)
@@ -393,7 +400,7 @@ static void bad_example(void)
     if (cp1 != NULL)
       free(cp1);
   }
-  CATCH(ex) {
+  CATCH_ANONYMOUS {
     printf("cp3=%s", cp3);
     RETHROW;
   }
@@ -407,7 +414,6 @@ typedef struct {
 static void good_example(void)
 {
   global_context_t *global_context = malloc(sizeof(global_context_t));
-  xbt_ex_t ex;
 
   /* GOOD_EXAMPLE */
   {                             /*01 */
@@ -422,7 +428,8 @@ static void good_example(void)
       cp3 = mallocex(SMALLAMOUNT);
       strcpy(cp1, "foo");
       strcpy(cp2, "bar");
-    } TRY_CLEANUP {             /*04 */
+    }
+    TRY_CLEANUP {               /*04 */
       printf("cp3=%s", cp3 == NULL /*02 */ ? "" : cp3);
       if (cp3 != NULL)
         free(cp3);
@@ -430,7 +437,7 @@ static void good_example(void)
         free(cp2);
       /*05 cp1 was given away */
     }
-    CATCH(ex) {
+    CATCH_ANONYMOUS {
       /*05 global context untouched */
       RETHROW;
     }