X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/edde8f7fbc1b74a81551bf9eb7bac1935b999296..c1aaa8bd4ce09f0e1c54cd82dac03adc12b0a488:/src/xbt/ex.c?ds=sidebyside diff --git a/src/xbt/ex.c b/src/xbt/ex.c index 9768d5e640..4eb0569eca 100644 --- a/src/xbt/ex.c +++ b/src/xbt/ex.c @@ -65,6 +65,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_ex, xbt, "Exception mecanism"); +XBT_EXPORT_NO_IMPORT(const xbt_running_ctx_t) __xbt_ex_ctx_initializer = XBT_RUNNING_CTX_INITIALIZER; + /* default __ex_ctx callback function */ xbt_running_ctx_t *__xbt_ex_ctx_default(void) { @@ -144,28 +146,29 @@ void xbt_ex_display(xbt_ex_t * e) xbt_ex_catname(e->category), e->value, e->msg, e->procname, thrower ? thrower : " in this process"); XBT_CRITICAL("%s", e->msg); + xbt_free(thrower); if (!e->remote && !e->bt_strings) xbt_ex_setup_backtrace(e); #ifdef HAVE_BACKTRACE - /* We have everything to build neat backtraces */ - { + if (e->used && e->bt_strings) { + /* We have everything to build neat backtraces */ 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]); - } -#else - fprintf(stderr, " at %s:%d:%s (no backtrace available on that arch)\n", - e->file, e->line, e->func); + } else #endif + { + fprintf(stderr, + "\n" + "** In %s() at %s:%d\n" + "** (no backtrace available)\n", + e->func, e->file, e->line); + } } @@ -294,7 +297,7 @@ XBT_TEST_UNIT("value", test_value, "exception value passing") CATCH(ex) { xbt_test_add("exception value passing"); if (ex.category != unknown_error) - xbt_test_fail("category=%d (!= 1)", ex.category); + xbt_test_fail("category=%d (!= 1)", (int)ex.category); if (ex.value != 2) xbt_test_fail("value=%d (!= 2)", ex.value); if (strcmp(ex.msg, "toto")) @@ -306,7 +309,8 @@ XBT_TEST_UNIT("value", test_value, "exception value passing") XBT_TEST_UNIT("variables", test_variables, "variable value preservation") { xbt_ex_t ex; - int r1, r2; + int r1; + int _XBT_GNUC_UNUSED r2; volatile int v1, v2; r1 = r2 = v1 = v2 = 1234;