[RFC PATCH v2 9/9] libcamera: base: log: Store categories in list

Barnabás Pőcze pobrn at protonmail.com
Mon Feb 3 18:59:39 CET 2025


Store the `LogCategory` objects in an `std::list`. This eliminates
the need for manually deleting them in the destructor while guaranteeing
address stability.

Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
---
 src/libcamera/base/log.cpp | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index 69aa16c4c..003e2cf3a 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -407,7 +407,7 @@ private:
 	static bool destroyed_;
 
 	Mutex mutex_;
-	std::vector<LogCategory *> categories_;
+	std::list<LogCategory> categories_;
 	std::list<std::pair<std::string, LogSeverity>> levels_;
 
 	std::shared_ptr<LogOutput> output_;
@@ -524,9 +524,6 @@ void logSetLevel(const char *category, const char *level)
 Logger::~Logger()
 {
 	destroyed_ = true;
-
-	for (LogCategory *category : categories_)
-		delete category;
 }
 
 /**
@@ -659,9 +656,9 @@ void Logger::logSetLevel(const char *category, const char *level)
 
 	MutexLocker locker(mutex_);
 
-	for (LogCategory *c : categories_) {
-		if (c->name() == category) {
-			c->setSeverity(severity);
+	for (LogCategory &c : categories_) {
+		if (c.name() == category) {
+			c.setSeverity(severity);
 			break;
 		}
 	}
@@ -717,12 +714,12 @@ LogCategory *Logger::findOrCreateCategory(std::string_view name)
 {
 	MutexLocker locker(mutex_);
 
-	for (LogCategory *category : categories_) {
-		if (category->name() == name)
-			return category;
+	for (LogCategory &category : categories_) {
+		if (category.name() == name)
+			return &category;
 	}
 
-	LogCategory *category = categories_.emplace_back(new LogCategory(name));
+	LogCategory &category = categories_.emplace_back(name);
 
 	for (const std::pair<std::string, LogSeverity> &level : levels_) {
 		bool match = true;
@@ -739,12 +736,12 @@ LogCategory *Logger::findOrCreateCategory(std::string_view name)
 		}
 
 		if (match) {
-			category->setSeverity(level.second);
+			category.setSeverity(level.second);
 			break;
 		}
 	}
 
-	return category;
+	return &category;
 }
 
 /**
-- 
2.48.1




More information about the libcamera-devel mailing list