Skip to content
Snippets Groups Projects
Commit a9739d87 authored by Florian Fischer's avatar Florian Fischer Committed by Florian Schmaus
Browse files

Make log() thread-safe by dropping the log level map

Concurrently using the CLOG_CONFIG map can result in a segmentation fault.

To prevent concurrent access to LOG_CONFIG a new constexpr getLevelFor
is introduces analogue to getTagFor.
parent 0ecb2e24
No related branches found
No related tags found
1 merge request!19Re-enable SimpleActorTest
......@@ -3,7 +3,6 @@
#pragma once
#include <iostream> // IWYU pragma: keep
#include <map> // for allocator, map
#include <sstream> // IWYU pragma: keep
#include <string> // for string, operator<<
......@@ -77,16 +76,33 @@ enum LogLevel {
void worker_log(const std::string& prefix, const std::string& message);
static const std::map<LogSubsystem, LogLevel> LOG_CONFIG = {
{LogSubsystem::PS, ALL}, {LogSubsystem::F, ALL}, {LogSubsystem::C, ALL},
{LogSubsystem::CM, ALL}, {LogSubsystem::DISP, ALL}, {LogSubsystem::SCHED, ALL},
{LogSubsystem::RUNTI, ALL}, {LogSubsystem::U_B_MPSC_Q, ALL},
};
template <LogSubsystem logSubsystem>
class Logger {
private:
static constexpr auto getTagFor(LogSubsystem system) -> char const* {
static constexpr LogLevel getLevelFor(LogSubsystem system) {
switch (system) {
case LogSubsystem::PS:
return ALL;
case LogSubsystem::F:
return ALL;
case LogSubsystem::C:
return ALL;
case LogSubsystem::CM:
return ALL;
case LogSubsystem::DISP:
return ALL;
case LogSubsystem::SCHED:
return ALL;
case LogSubsystem::RUNTI:
return ALL;
case LogSubsystem::U_B_MPSC_Q:
return ALL;
default:
return ALL;
}
}
static constexpr char const* getTagFor(LogSubsystem system) {
switch (system) {
case LogSubsystem::PS:
return "PS ";
......@@ -125,7 +141,7 @@ class Logger {
// Do not log any debug messages if NDEBUG is defined.
if (level >= Debug) return;
#endif
if (level > LOG_CONFIG.at(logSubsystem)) return;
if (level > getLevelFor(logSubsystem)) return;
std::string subSystemTag = getTagFor(logSubsystem);
;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment