libcamera: base: log: Avoid manual LogCategory deletion

Wrap the `LogCategory` pointers in `std::unique_ptr` to avoid
the need for manual deletion in the destructor.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze 2025-01-29 16:20:25 +01:00
parent 9ac914c634
commit 0fc00eacdb

View file

@ -322,7 +322,7 @@ private:
static bool destroyed_; static bool destroyed_;
Mutex mutex_; Mutex mutex_;
std::vector<LogCategory *> categories_ LIBCAMERA_TSA_GUARDED_BY(mutex_); std::vector<std::unique_ptr<LogCategory>> categories_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
std::list<std::pair<std::string, LogSeverity>> levels_; std::list<std::pair<std::string, LogSeverity>> levels_;
std::shared_ptr<LogOutput> output_; std::shared_ptr<LogOutput> output_;
@ -439,9 +439,6 @@ void logSetLevel(const char *category, const char *level)
Logger::~Logger() Logger::~Logger()
{ {
destroyed_ = true; destroyed_ = true;
for (LogCategory *category : categories_)
delete category;
} }
/** /**
@ -574,7 +571,7 @@ void Logger::logSetLevel(const char *category, const char *level)
MutexLocker locker(mutex_); MutexLocker locker(mutex_);
for (LogCategory *c : categories_) { for (const auto &c : categories_) {
if (c->name() == category) { if (c->name() == category) {
c->setSeverity(severity); c->setSeverity(severity);
break; break;
@ -718,12 +715,12 @@ LogCategory *Logger::findOrCreateCategory(std::string_view name)
{ {
MutexLocker locker(mutex_); MutexLocker locker(mutex_);
for (LogCategory *category : categories_) { for (const auto &category : categories_) {
if (category->name() == name) if (category->name() == name)
return category; return category.get();
} }
LogCategory *category = categories_.emplace_back(new LogCategory(name)); LogCategory *category = categories_.emplace_back(std::unique_ptr<LogCategory>(new LogCategory(name))).get();
const char *categoryName = category->name().c_str(); const char *categoryName = category->name().c_str();
for (const auto &[pattern, severity] : levels_) { for (const auto &[pattern, severity] : levels_) {