Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Declare needed categories in XBT_LOG_CONNECT macro.
[simgrid.git] / include / xbt / log.h
index 5df2d07..d1d7315 100644 (file)
@@ -113,10 +113,20 @@ typedef enum {
  */
 #if defined(_MSC_VER)
 # define _XBT_LOG_PARENT_INITIALIZER(parent) NULL
-# define XBT_LOG_CONNECT(parent_cat,child)       _XBT_LOGV(child).parent = &_XBT_LOGV(parent_cat)
+# define XBT_LOG_CONNECT(child, parent_cat)                             \
+  if (1) {                                                              \
+    XBT_LOG_EXTERNAL_CATEGORY(child);                                   \
+    XBT_LOG_EXTERNAL_CATEGORY(parent_cat);                              \
+    _XBT_LOGV(child).parent = &_XBT_LOGV(parent_cat);                   \
+  } else ((void)0)
 #else
 # define _XBT_LOG_PARENT_INITIALIZER(parent) &_XBT_LOGV(parent)
-# define XBT_LOG_CONNECT(parent_cat,child)      /*  xbt_assert(_XBT_LOGV(child).parent == &_XBT_LOGV(parent_cat)) */
+# define XBT_LOG_CONNECT(child, parent_cat)                             \
+  if (1) {                                                              \
+    XBT_LOG_EXTERNAL_CATEGORY(child);                                   \
+    XBT_LOG_EXTERNAL_CATEGORY(parent_cat);                              \
+    xbt_assert(_XBT_LOGV(child).parent == &_XBT_LOGV(parent_cat));      \
+  } else ((void)0)
 #endif
 
 /* XBT_LOG_NEW_SUBCATEGORY_helper:
@@ -129,6 +139,7 @@ typedef enum {
         NULL /* firstChild */,                          \
        NULL /* nextSibling */,                         \
         #catName,                                       \
+        0 /*initialized */,                             \
         xbt_log_priority_uninitialized /* threshold */, \
         1 /* isThreshInherited */,                      \
         NULL /* appender */,                            \
@@ -247,6 +258,7 @@ struct xbt_log_category_s {
   xbt_log_category_t firstChild;
   xbt_log_category_t nextSibling;
   const char *name;
+  int initialized;
   int threshold;
   int isThreshInherited;
   xbt_log_appender_t appender;
@@ -361,13 +373,12 @@ extern xbt_log_layout_t xbt_log_default_layout;
  *
  * NOTES
  * First part is a compile-time constant.
- * Call to _log_initCat only happens once.
+ * Call to xbt_log_cat_init only happens once.
  */
 #define _XBT_LOG_ISENABLEDV(catv, priority)                  \
        (priority >= XBT_LOG_STATIC_THRESHOLD                 \
-        && priority >= catv.threshold                         \
-        && (catv.threshold != xbt_log_priority_uninitialized \
-            || _xbt_log_cat_init(&catv, priority)) )
+        && (catv.initialized || _xbt_log_cat_init(&catv, priority)) \
+        && priority >= catv.threshold)
 
 /*
  * Internal Macros