Skip to content
Snippets Groups Projects
Commit b045b402 authored by Florian Fischer's avatar Florian Fischer
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 abe40d3d
No related tags found
No related merge requests found
......@@ -60,21 +60,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 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:
......@@ -115,7 +127,7 @@ protected:
// 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