From f9a49043c35e73fc2d4ffb3ed9b39c33849c43b3 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 15 Dec 2023 21:14:17 +0800 Subject: fix: slove threading and memory issues --- src/core/thread/TaskRunnerGetter.cpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'src/core/thread/TaskRunnerGetter.cpp') diff --git a/src/core/thread/TaskRunnerGetter.cpp b/src/core/thread/TaskRunnerGetter.cpp index 639a142c..bdcd89d0 100644 --- a/src/core/thread/TaskRunnerGetter.cpp +++ b/src/core/thread/TaskRunnerGetter.cpp @@ -28,25 +28,37 @@ #include "core/thread/TaskRunnerGetter.h" -#include "thread/TaskRunner.h" +#include + +#include "core/GpgConstants.h" +#include "core/thread/TaskRunner.h" namespace GpgFrontend::Thread { -TaskRunnerGetter::TaskRunnerGetter(int channel) - : SingletonFunctionObject(channel) {} +TaskRunnerGetter::TaskRunnerGetter(int) + : SingletonFunctionObject(kGpgFrontendDefaultChannel) {} -TaskRunnerPtr GpgFrontend::Thread::TaskRunnerGetter::GetTaskRunner( - TaskRunnerType runner_type) { +auto TaskRunnerGetter::GetTaskRunner(TaskRunnerType runner_type) + -> TaskRunnerPtr { + std::lock_guard lock_guard(task_runners_map_lock_); while (true) { auto it = task_runners_.find(runner_type); if (it != task_runners_.end()) { return it->second; - } else { - auto runner = GpgFrontend::SecureCreateSharedObject(); - task_runners_[runner_type] = runner; - runner->Start(); - continue; } + + auto runner = GpgFrontend::SecureCreateSharedObject(); + task_runners_[runner_type] = runner; + runner->Start(); } } + +void TaskRunnerGetter::StopAllTeakRunner() { + for (const auto& [key, value] : task_runners_) { + if (value->IsRunning()) { + value->Stop(); + } + } +} + } // namespace GpgFrontend::Thread \ No newline at end of file -- cgit v1.2.3