git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2112
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
line_func[strlen(line_func)-1]='\0';
fgets(line_pos,1024,pipe);
line_pos[strlen(line_pos)-1]='\0';
line_func[strlen(line_func)-1]='\0';
fgets(line_pos,1024,pipe);
line_pos[strlen(line_pos)-1]='\0';
-
- e->bt_strings[i] = bprintf("** At %s: %s (%s)", addrs[i], line_func,line_pos);
+
+ if (strcmp("??",line_func)) {
+ e->bt_strings[i] = bprintf("** At %s: %s (%s)", addrs[i], line_func,line_pos);
+ } else {
+ char *p=bprintf("%s",backtrace[i]);
+ char *pos=strrchr(p,' ');
+ *pos = '\0';
+ e->bt_strings[i] = bprintf("** At %s: ?? (%s)", addrs[i], p);
+ free(p);
+ }
free(addrs[i]);
}
free(addrs);
free(addrs[i]);
}
free(addrs);
fprintf(stderr," at %s:%d:%s (no backtrace available on that arch)\n",
e->file,e->line,e->func);
#endif
fprintf(stderr," at %s:%d:%s (no backtrace available on that arch)\n",
e->file,e->line,e->func);
#endif
ex_ctx_cb_t __xbt_ex_ctx = &__xbt_ex_ctx_default;
ex_term_cb_t __xbt_ex_terminate = &__xbt_ex_terminate_default;
ex_ctx_cb_t __xbt_ex_ctx = &__xbt_ex_ctx_default;
ex_term_cb_t __xbt_ex_terminate = &__xbt_ex_terminate_default;
-void xbt_ex_free(xbt_ex_t e) {
+void xbt_ex_free(xbt_ex_t *e) {
- if (e.msg) free(e.msg);
- free(e.procname);
- if (e.remote) {
- free(e.file);
- free(e.func);
- free(e.host);
+ if (e->msg) free(e->msg);
+ free(e->procname);
+ if (e->remote) {
+ free(e->file);
+ free(e->func);
+ free(e->host);
- /* locally, only one chunk of memory is allocated by the libc */
- if (e.bt_strings) {
- for (i=0; i<e.used; i++)
- free(e.bt_strings[i]);
- free(e.bt_strings);
+ if (e->bt_strings) {
+ for (i=0; i<e->used; i++)
+ free(e->bt_strings[i]);
+ free(e->bt_strings);
+ e->bt_strings = NULL;
}
/** \brief returns a short name for the given exception category */
}
/** \brief returns a short name for the given exception category */
if (n != 4)
xbt_test_fail1("M4: n=%d (!= 4)", n);
n++;
if (n != 4)
xbt_test_fail1("M4: n=%d (!= 4)", n);
n++;
}
if (n != 5)
xbt_test_fail1("M5: n=%d (!= 5)", n);
}
if (n != 5)
xbt_test_fail1("M5: n=%d (!= 5)", n);
xbt_test_fail1("value=%d (!= 2)", ex.value);
if (strcmp(ex.msg,"toto"))
xbt_test_fail1("message=%s (!= toto)", ex.msg);
xbt_test_fail1("value=%d (!= 2)", ex.value);
if (strcmp(ex.msg,"toto"))
xbt_test_fail1("message=%s (!= toto)", ex.msg);
/* r2 is allowed to be destroyed because not volatile */
if (v2 != 5678)
xbt_test_fail1("v2=%d (!= 5678)", v2);
/* r2 is allowed to be destroyed because not volatile */
if (v2 != 5678)
xbt_test_fail1("v2=%d (!= 5678)", v2);
xbt_test_fail1("v1 = %d (!= 5678)", v1);
if (!(ex.category == 1 && ex.value == 2 && !strcmp(ex.msg,"blah")))
xbt_test_fail0("unexpected exception contents");
xbt_test_fail1("v1 = %d (!= 5678)", v1);
if (!(ex.category == 1 && ex.value == 2 && !strcmp(ex.msg,"blah")))
xbt_test_fail0("unexpected exception contents");
}
if (!c)
xbt_test_fail0("xbt_ex_free not executed");
}
if (!c)
xbt_test_fail0("xbt_ex_free not executed");