From 1c17ec559950fb3795f5a0d471a0aa6136f2e7ef Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 10 Jan 2024 20:13:53 +0100 Subject: [PATCH] fix: Avoid heap allocations in thread local storage --- lib/libimhex/source/api/task_manager.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/libimhex/source/api/task_manager.cpp b/lib/libimhex/source/api/task_manager.cpp index a5b1f236a..12cc9573e 100644 --- a/lib/libimhex/source/api/task_manager.cpp +++ b/lib/libimhex/source/api/task_manager.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -29,7 +30,7 @@ namespace hex { std::condition_variable s_jobCondVar; std::vector s_workers; - thread_local std::string s_currentThreadName; + thread_local std::array s_currentThreadName; } @@ -58,7 +59,6 @@ namespace hex { Task::~Task() { if (!this->isFinished()) this->interrupt(); - s_currentThreadName.clear(); } void Task::update(u64 value) { @@ -280,8 +280,6 @@ namespace hex { s_deferredCalls.clear(); s_tasksFinishedCallbacks.clear(); - - s_currentThreadName.clear(); } TaskHolder TaskManager::createTask(std::string name, u64 maxValue, bool background, std::function function) { @@ -371,7 +369,9 @@ namespace hex { } void TaskManager::setCurrentThreadName(const std::string &name) { - s_currentThreadName = name; + std::ranges::fill(s_currentThreadName, '\0'); + std::ranges::copy(name | std::views::take(255), s_currentThreadName.begin()); + #if defined(OS_WINDOWS) using SetThreadDescriptionFunc = HRESULT(WINAPI*)(HANDLE hThread, PCWSTR lpThreadDescription); @@ -414,7 +414,7 @@ namespace hex { } std::string TaskManager::getCurrentThreadName() { - return s_currentThreadName; + return s_currentThreadName.data(); }