From 70723ffd29163bca79ae06de8be2f6b98f5bb226 Mon Sep 17 00:00:00 2001 From: Joseph Klix Date: Mon, 15 Jul 2024 15:17:51 -0700 Subject: [PATCH 1/4] rebase --- .../include/aws/core/utils/threading/Executor.h | 1 - .../include/aws/core/utils/threading/PooledThreadExecutor.h | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h b/src/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h index ac93ce76322..4bc02c2789a 100644 --- a/src/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h +++ b/src/aws-cpp-sdk-core/include/aws/core/utils/threading/Executor.h @@ -8,7 +8,6 @@ #define AWS_EXECUTOR_H #include - #include namespace Aws diff --git a/src/aws-cpp-sdk-core/include/aws/core/utils/threading/PooledThreadExecutor.h b/src/aws-cpp-sdk-core/include/aws/core/utils/threading/PooledThreadExecutor.h index 88bfed20bfa..6ce703bc53c 100644 --- a/src/aws-cpp-sdk-core/include/aws/core/utils/threading/PooledThreadExecutor.h +++ b/src/aws-cpp-sdk-core/include/aws/core/utils/threading/PooledThreadExecutor.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -57,7 +57,7 @@ namespace Aws private: Aws::Queue*> m_tasks; mutable std::mutex m_queueLock; - Aws::Utils::Threading::Semaphore m_sync; + std::condition_variable m_sync; Aws::Vector m_threadTaskHandles; size_t m_poolSize = 0; OverflowPolicy m_overflowPolicy = OverflowPolicy::QUEUE_TASKS_EVENLY_ACROSS_THREADS; From cc535446cba9bfacd8deeb2d291fa89a9bc833fd Mon Sep 17 00:00:00 2001 From: Joseph Klix Date: Mon, 15 Jul 2024 15:19:43 -0700 Subject: [PATCH 2/4] rebase --- .../utils/threading/PooledThreadExecutor.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp b/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp index 0eec58d26f4..89a045e96b6 100644 --- a/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp +++ b/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp @@ -33,10 +33,15 @@ void PooledThreadExecutor::WaitUntilStopped() } for(auto threadTask : m_threadTaskHandles) { - threadTask->StopProcessingWork(); + std::lock_guard lock(m_queueLock); + + for(auto threadTask : m_threadTaskHandles) + { + threadTask->StopProcessingWork(); + } } - m_sync.ReleaseAll(); + m_sync.notify_all(); for (auto threadTask : m_threadTaskHandles) { @@ -73,15 +78,13 @@ bool PooledThreadExecutor::SubmitToThread(std::function&& fn) m_tasks.push(fnCpy); } - m_sync.Release(); + m_sync.notify_one(); return true; } std::function* PooledThreadExecutor::PopTask() { - std::lock_guard locker(m_queueLock); - if (m_tasks.size() > 0) { std::function* fn = m_tasks.front(); @@ -97,6 +100,5 @@ std::function* PooledThreadExecutor::PopTask() bool PooledThreadExecutor::HasTasks() const { - std::lock_guard locker(m_queueLock); return m_tasks.size() > 0; } From e20b4e102ffbac207a6b352dd30402ba3e68f718 Mon Sep 17 00:00:00 2001 From: hunjmes <106619278+hunjmes@users.noreply.github.com> Date: Thu, 9 Nov 2023 19:21:35 -0800 Subject: [PATCH 3/4] Update ThreadTask.cpp --- .../source/utils/threading/ThreadTask.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp b/src/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp index 77121ca5717..04c2b7e20f5 100644 --- a/src/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp +++ b/src/aws-cpp-sdk-core/source/utils/threading/ThreadTask.cpp @@ -21,22 +21,23 @@ ThreadTask::~ThreadTask() void ThreadTask::MainTaskRunner() { + std::unique_lock lock(m_executor.m_queueLock); + while (m_continue) { - while (m_continue && m_executor.HasTasks()) + if (m_executor.HasTasks()) { auto fn = m_executor.PopTask(); + lock.unlock(); if(fn) { (*fn)(); Aws::Delete(fn); } + lock.lock(); } - - if(m_continue) - { - m_executor.m_sync.WaitOne(); - } + + m_executor.m_sync.wait(lock, [this] { return !m_continue || m_executor.HasTasks(); }); } } From 7ea35de0c8b0bd38ee88ad940787b5f3e99a02ba Mon Sep 17 00:00:00 2001 From: Joseph Klix Date: Mon, 15 Jul 2024 15:27:59 -0700 Subject: [PATCH 4/4] update to match original PR --- .../source/utils/threading/PooledThreadExecutor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp b/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp index 89a045e96b6..c0004352e2d 100644 --- a/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp +++ b/src/aws-cpp-sdk-core/source/utils/threading/PooledThreadExecutor.cpp @@ -31,7 +31,6 @@ void PooledThreadExecutor::WaitUntilStopped() std::lock_guard locker(m_queueLock); m_stopped = true; } - for(auto threadTask : m_threadTaskHandles) { std::lock_guard lock(m_queueLock);