X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a3d08dd00246eb26ced68c5b0e046096706bbe23..9712e9b69da18f664d51ce81323234f18494fdd3:/src/xbt/log.c diff --git a/src/xbt/log.c b/src/xbt/log.c index 30d72a92e6..9738053597 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -280,11 +280,6 @@ void xbt_log_init(int *argc, char **argv) unsigned help_requested = 0; /* 1: logs; 2: categories */ int j = 1; - /* uncomment to set the LOG category to debug directly */ - // _XBT_LOGV(log).threshold = xbt_log_priority_debug; - - xbt_log_connect_categories(); - /* Set logs and init log submodule */ for (int i = 1; i < *argc; i++) { if (!strncmp(argv[i], "--log=", strlen("--log="))) { @@ -341,7 +336,7 @@ void xbt_log_postexit(void) log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT)); } - /* Size of the static string in which we build the log string */ +/* Size of the static string in which we build the log string */ #define XBT_LOG_STATIC_BUFFER_SIZE 2048 /* Minimum size of the dynamic string in which we build the log string (should be greater than XBT_LOG_STATIC_BUFFER_SIZE) */ @@ -355,63 +350,66 @@ void _xbt_log_event_log(xbt_log_event_t ev, const char *fmt, ...) xbt_assert(ev->priority < sizeof(xbt_log_priority_names), "Priority %d is greater than the biggest allowed value", ev->priority); - do { + while (1) { xbt_log_appender_t appender = cat->appender; - if (!appender) - continue; /* No appender, try next */ + if (appender != NULL) { + xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name); - xbt_assert(cat->layout, "No valid layout for the appender of category %s", cat->name); - - /* First, try with a static buffer */ - if (XBT_LOG_STATIC_BUFFER_SIZE) { + /* First, try with a static buffer */ + int done = 0; char buff[XBT_LOG_STATIC_BUFFER_SIZE]; - ev->buffer = buff; + ev->buffer = buff; ev->buffer_size = sizeof buff; va_start(ev->ap, fmt); - int done = cat->layout->do_layout(cat->layout, ev, fmt); + done = cat->layout->do_layout(cat->layout, ev, fmt); va_end(ev->ap); if (done) { appender->do_append(appender, buff); - continue; /* Ok, that worked: go next */ + } else { + + /* The static buffer was too small, use a dynamically expanded one */ + ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE; + ev->buffer = xbt_malloc(ev->buffer_size); + while (1) { + va_start(ev->ap, fmt); + done = cat->layout->do_layout(cat->layout, ev, fmt); + va_end(ev->ap); + if (done) + break; /* Got it */ + ev->buffer_size *= 2; + ev->buffer = xbt_realloc(ev->buffer, ev->buffer_size); + } + appender->do_append(appender, ev->buffer); + xbt_free(ev->buffer); } } - /* The static buffer was too small, use a dynamically expanded one */ - ev->buffer_size = XBT_LOG_DYNAMIC_BUFFER_SIZE; - ev->buffer = xbt_malloc(ev->buffer_size); - while (1) { - va_start(ev->ap, fmt); - int done = cat->layout->do_layout(cat->layout, ev, fmt); - va_end(ev->ap); - if (done) - break; /* Got it */ - ev->buffer_size *= 2; - ev->buffer = xbt_realloc(ev->buffer, ev->buffer_size); - } - appender->do_append(appender, ev->buffer); - xbt_free(ev->buffer); - - } while (cat->additivity && (cat = cat->parent, 1)); + if (!cat->additivity) + break; + cat = cat->parent; + } } -#undef XBT_LOG_DYNAMIC_BUFFER_SIZE -#undef XBT_LOG_STATIC_BUFFER_SIZE - /* NOTE: * * The standard logging macros use _XBT_LOG_ISENABLED, which calls _xbt_log_cat_init(). Thus, if we want to avoid an * infinite recursion, we can not use the standard logging macros in _xbt_log_cat_init(), and in all functions called * from it. * - * To circumvent the problem, we define the macro_xbt_log_init() as (0) for the length of the affected functions, and - * we do not forget to undefine it at the end! + * To circumvent the problem, we define the macro DISABLE_XBT_LOG_CAT_INIT() to hide the real _xbt_log_cat_init(). The + * macro has to be called at the beginning of the affected functions. */ +static int fake_xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) +{ + return 0; +} +#define DISABLE_XBT_LOG_CAT_INIT() \ + int (*_xbt_log_cat_init)(xbt_log_category_t, e_xbt_log_priority_t) XBT_ATTRIB_UNUSED = fake_xbt_log_cat_init; static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_t setting) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (setting->thresh != xbt_log_priority_uninitialized) { xbt_log_threshold_set(category, setting->thresh); @@ -438,7 +436,6 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ category->additivity = 0; XBT_DEBUG("Set %p as appender of category '%s'", setting->appender, category->name); } -#undef _xbt_log_cat_init } /* @@ -447,8 +444,7 @@ static void _xbt_log_cat_apply_set(xbt_log_category_t category, xbt_log_setting_ */ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority) { -#define _xbt_log_cat_init(a, b) (0) - + DISABLE_XBT_LOG_CAT_INIT(); if (log_cat_init_mutex != NULL) xbt_os_mutex_acquire(log_cat_init_mutex); @@ -526,8 +522,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority if (log_cat_init_mutex != NULL) xbt_os_mutex_release(log_cat_init_mutex); return priority >= category->threshold; - -#undef _xbt_log_cat_init } void xbt_log_parent_set(xbt_log_category_t cat, xbt_log_category_t parent) @@ -786,7 +780,7 @@ void xbt_log_appender_set(xbt_log_category_t cat, xbt_log_appender_t app) void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) { -#define _xbt_log_cat_init(a, b) (0) + DISABLE_XBT_LOG_CAT_INIT(); if (!cat->appender) { XBT_VERB ("No appender to category %s. Setting the file appender as default", cat->name); xbt_log_appender_set(cat, xbt_log_appender_file_new(NULL)); @@ -799,7 +793,6 @@ void xbt_log_layout_set(xbt_log_category_t cat, xbt_log_layout_t lay) } cat->layout = lay; xbt_log_additivity_set(cat, 0); -#undef _xbt_log_cat_init } void xbt_log_additivity_set(xbt_log_category_t cat, int additivity)