diff --git a/libs/log/source/log.cpp b/libs/log/source/log.cpp index 4f070455..7ecc820b 100644 --- a/libs/log/source/log.cpp +++ b/libs/log/source/log.cpp @@ -139,10 +139,15 @@ namespace psemek::log level max_; }; + thread_local bool this_thread_registered = false; + } void register_thread(std::string name) { + if (this_thread_registered) + return; + #ifdef _PTHREAD_H #if (defined _GNU_SOURCE) #if __APPLE__ @@ -167,6 +172,8 @@ namespace psemek::log thread_names[id] = std::make_unique(name); } + this_thread_registered = true; + { std::size_t current_max = max_thread_name_length.load(); while(current_max < name.size() && !max_thread_name_length.compare_exchange_weak(current_max, name.size())) @@ -178,6 +185,9 @@ namespace psemek::log void unregister_thread(std::thread::id id) { + if (!this_thread_registered) + return; + std::string name; { std::lock_guard lock{thread_names_mutex}; @@ -194,6 +204,8 @@ namespace psemek::log thread_names.erase(it); } + this_thread_registered = false; + if (id == std::this_thread::get_id()) put_message(level::info, "Thread \"" + name + "\" unregistered", name); else