diff options
-rw-r--r-- | include/libcamera/internal/log.h | 6 | ||||
-rw-r--r-- | src/libcamera/log.cpp | 32 |
2 files changed, 14 insertions, 24 deletions
diff --git a/include/libcamera/internal/log.h b/include/libcamera/internal/log.h index b66bf55b..b8efb161 100644 --- a/include/libcamera/internal/log.h +++ b/include/libcamera/internal/log.h @@ -29,7 +29,6 @@ class LogCategory { public: explicit LogCategory(const char *name); - ~LogCategory(); const char *name() const { return name_; } LogSeverity severity() const { return severity_; } @@ -48,8 +47,9 @@ extern const LogCategory &_LOG_CATEGORY(name)(); #define LOG_DEFINE_CATEGORY(name) \ const LogCategory &_LOG_CATEGORY(name)() \ { \ - static LogCategory category(#name); \ - return category; \ + /* The instance will be deleted by the Logger destructor. */ \ + static LogCategory *category = new LogCategory(#name); \ + return *category; \ } class LogMessage diff --git a/src/libcamera/log.cpp b/src/libcamera/log.cpp index dd991647..74829a56 100644 --- a/src/libcamera/log.cpp +++ b/src/libcamera/log.cpp @@ -248,6 +248,8 @@ void LogOutput::writeStream(const std::string &str) class Logger { public: + ~Logger(); + static Logger *instance(); void write(const LogMessage &msg); @@ -267,7 +269,6 @@ private: friend LogCategory; void registerCategory(LogCategory *category); - void unregisterCategory(LogCategory *category); std::unordered_set<LogCategory *> categories_; std::list<std::pair<std::string, LogSeverity>> levels_; @@ -369,6 +370,12 @@ void logSetLevel(const char *category, const char *level) Logger::instance()->logSetLevel(category, level); } +Logger::~Logger() +{ + for (LogCategory *category : categories_) + delete category; +} + /** * \brief Retrieve the logger instance * @@ -666,18 +673,6 @@ void Logger::registerCategory(LogCategory *category) } /** - * \brief Unregister a log category from the logger - * \param[in] category The log category - * - * If the \a category hasn't been registered with the logger this function - * performs no operation. - */ -void Logger::unregisterCategory(LogCategory *category) -{ - categories_.erase(category); -} - -/** * \enum LogSeverity * Log message severity * \var LogDebug @@ -711,11 +706,6 @@ LogCategory::LogCategory(const char *name) Logger::instance()->registerCategory(this); } -LogCategory::~LogCategory() -{ - Logger::instance()->unregisterCategory(this); -} - /** * \fn LogCategory::name() * \brief Retrieve the log category name @@ -746,12 +736,12 @@ void LogCategory::setSeverity(LogSeverity severity) * The default log category is named "default" and is used by the LOG() macro * when no log category is specified. * - * \return A pointer to the default log category + * \return A reference to the default log category */ const LogCategory &LogCategory::defaultCategory() { - static const LogCategory category("default"); - return category; + static const LogCategory *category = new LogCategory("default"); + return *category; } /** |