#include "portable.h" /* execinfo when available */
#include "xbt/ex.h"
+#include "xbt/str.h"
#include "xbt/module.h" /* xbt_binary_name */
#include "xbt/synchro.h" /* xbt_thread_self */
for (i=0; environ[i]; i++) {
if (!strncmp("PATH=",environ[i], 5)) {
xbt_dynar_t path=xbt_str_split(environ[i] + 5, ":");
- int cpt;
+ unsigned int cpt;
char *data;
xbt_dynar_foreach(path, cpt, data) {
if (binary_name)
free(addrs[i]);
/* Mask the bottom of the stack */
- if (!strncmp("main",line_func,strlen("main"))) {
- int j;
- for (j=i+1; j<e->used; j++)
- free(addrs[j]);
- e->used = i+1;
- }
-
- if (!strncmp("__context_wrapper",line_func,strlen("__context_wrapper"))) {
+ if (!strncmp("main",line_func,strlen("main")) ||
+ !strncmp("xbt_thread_context_wrapper",line_func,strlen("xbt_thread_context_wrapper"))) {
int j;
for (j=i+1; j<e->used; j++)
free(addrs[j]);
e->used = i;
+
+ if (!strncmp("xbt_thread_context_wrapper",line_func,strlen("xbt_thread_context_wrapper"))) {
+ e->used++;
+ e->bt_strings[i] = bprintf("** (in a separate thread)");
+ }
}