Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Avoid to duplicate initialization list.
[simgrid.git] / include / xbt / ex.h
index 50ef63e..97e4eea 100644 (file)
@@ -55,15 +55,15 @@ SG_BEGIN_DECL()
 # include <stdio.h>
 #include <errno.h>
 #  define MAYDAY_SAVE(m)    printf("%d %s:%d save %p\n",                \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
                                    (m)->jb                              \
                                   ),
 #  define MAYDAY_RESTORE(m) printf("%d %s:%d restore %p\n",             \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
                                    (m)->jb                              \
                                   ),
 #  define MAYDAY_CATCH(e)   printf("%d %s:%d Catched '%s'\n",           \
-                                   (*xbt_getpid)(),__FILE__,__LINE__,  \
+                                   xbt_getpid(), __FILE__, __LINE__,    \
                                    (e).msg                              \
                                  ),
 #else
@@ -262,7 +262,8 @@ typedef enum {
   cancel_error,   /**< an action was canceled */
   thread_error,    /**< error while [un]locking */
   host_error,                            /**< host failed */
-  tracing_error   /**< error during the simulation tracing */
+  tracing_error,   /**< error during the simulation tracing */
+  io_error          /**< disk or file error */
 } xbt_errcat_t;
 
 XBT_PUBLIC(const char *) xbt_ex_catname(xbt_errcat_t cat);
@@ -304,34 +305,10 @@ typedef struct {
 #define XBT_RUNNING_CTX_INITIALIZER \
     { NULL, 0, { /* content */ NULL, unknown_error, 0, \
                  /* throw point*/ 0,NULL, NULL,0, NULL, 0, NULL,\
-                 /* backtrace */ 0,NULL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL} } }
-#define XBT_RUNNING_CTX_INITIALIZE(ctx) \
-    do { \
-        (ctx)->ctx_mctx          = NULL; \
-        (ctx)->ctx_caught        = 0;    \
-        (ctx)->exception.msg        = NULL; \
-        (ctx)->exception.category   = 0;    \
-        (ctx)->exception.value      = 0;    \
-        (ctx)->exception.remote     = 0;    \
-        (ctx)->exception.host       = NULL; \
-        (ctx)->exception.procname   = NULL; \
-        (ctx)->exception.pid        = 0;    \
-        (ctx)->exception.file       = NULL; \
-        (ctx)->exception.line       = 0;    \
-        (ctx)->exception.func       = NULL; \
-        (ctx)->exception.bt[0]      = NULL; \
-        (ctx)->exception.bt[1]      = NULL; \
-        (ctx)->exception.bt[2]      = NULL; \
-        (ctx)->exception.bt[3]      = NULL; \
-        (ctx)->exception.bt[4]      = NULL; \
-        (ctx)->exception.bt[5]      = NULL; \
-        (ctx)->exception.bt[6]      = NULL; \
-        (ctx)->exception.bt[7]      = NULL; \
-        (ctx)->exception.bt[8]      = NULL; \
-        (ctx)->exception.bt[9]      = NULL; \
-        (ctx)->exception.used       = 0; \
-        (ctx)->exception.bt_strings = NULL; \
-    } while (0)
+                 /* backtrace */ 0, NULL, /* bt[] */ } }
+
+XBT_PUBLIC_DATA(const xbt_running_ctx_t) __xbt_ex_ctx_initializer;
+#define XBT_RUNNING_CTX_INITIALIZE(ctx) (*(ctx) = __xbt_ex_ctx_initializer)
 
 /* the exception context */
 typedef xbt_running_ctx_t *(*xbt_running_ctx_fetcher_t) (void);
@@ -450,7 +427,7 @@ extern void __xbt_ex_terminate_default(xbt_ex_t * e);
      _throw_ctx->exception.remote   = 0;                                     \
      _throw_ctx->exception.host     = (char*)NULL;                           \
      _throw_ctx->exception.procname = (char*)xbt_procname();                 \
-     _throw_ctx->exception.pid      = (*xbt_getpid)();                       \
+     _throw_ctx->exception.pid      = xbt_getpid();                          \
      _throw_ctx->exception.file     = (char*)__FILE__;                       \
      _throw_ctx->exception.line     = __LINE__;                              \
      _throw_ctx->exception.func     = (char*)_XBT_FUNCTION;                  \
@@ -508,6 +485,8 @@ XBT_PUBLIC(void) xbt_ex_free(xbt_ex_t e);
 
 /** @brief Shows a backtrace of the current location */
 XBT_PUBLIC(void) xbt_backtrace_display_current(void);
+/** @brief reimplementation of glibc backtrace based directly on gcc library, without implicit malloc  */
+XBT_PUBLIC(int)xbt_backtrace_no_malloc(void**bt, int size);
 /** @brief Captures a backtrace for further use */
 XBT_PUBLIC(void) xbt_backtrace_current(xbt_ex_t * e);
 /** @brief Display a previously captured backtrace */