#include "src/xbt/log_private.hpp"
#include "xbt/string.hpp"
#include "xbt/sysdep.h"
-#include "xbt/xbt_modinter.h"
#include <algorithm>
#include <array>
static void xbt_log_help();
static void xbt_log_help_categories();
+static void xbt_log_postexit();
void xbt_log_init(int *argc, char **argv)
{
int parse_args = 1; // Stop parsing the parameters once we found '--'
xbt_log_control_set("xbt_help.app:stdout xbt_help.threshold:VERBOSE xbt_help.fmt:%m%n");
+ atexit(xbt_log_postexit);
/* Set logs and init log submodule */
for (int i = 1; i < *argc; i++) {
}
}
-static void log_cat_exit(const s_xbt_log_category_t* cat)
+static void log_cat_exit(xbt_log_category_t cat)
{
if (cat->appender) {
if (cat->appender->free_)
cat->appender->free_(cat->appender);
xbt_free(cat->appender);
+ cat->appender = nullptr;
}
if (cat->layout) {
if (cat->layout->free_)
cat->layout->free_(cat->layout);
xbt_free(cat->layout);
+ cat->layout = nullptr;
}
- for (auto const* child = cat->firstChild; child != nullptr; child = child->nextSibling)
+ for (auto* child = cat->firstChild; child != nullptr; child = child->nextSibling)
log_cat_exit(child);
+ cat->firstChild = nullptr;
}
-void xbt_log_postexit(void)
+static void xbt_log_postexit(void)
{
XBT_VERB("Exiting log");
log_cat_exit(&_XBT_LOGV(XBT_LOG_ROOT_CAT));
return priority >= category->threshold;
static std::recursive_mutex log_cat_init_mutex;
- log_cat_init_mutex.lock();
+ const std::scoped_lock lock(log_cat_init_mutex);
XBT_DEBUG("Initializing category '%s' (firstChild=%s, nextSibling=%s)", category->name,
(category->firstChild ? category->firstChild->name : "none"),
}
category->initialized = 1;
- log_cat_init_mutex.unlock();
return priority >= category->threshold;
}