aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/parallelwork.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-08-04 18:37:52 +0200
committerGitHub Enterprise <[email protected]>2025-08-04 18:37:52 +0200
commitd71932a6ec3aabd2515e4eb94c0d88dc428a41f2 (patch)
tree4200a8231a6c699f08a24aefc64ac882ffc6ce54 /src/zenutil/parallelwork.cpp
parentadd hardening for legacy cache bucket manifests (#454) (diff)
downloadzen-d71932a6ec3aabd2515e4eb94c0d88dc428a41f2.tar.xz
zen-d71932a6ec3aabd2515e4eb94c0d88dc428a41f2.zip
Don't set m_DispatchComplete in ParallelWork until after pending work countdown succeeds (#455)
Diffstat (limited to 'src/zenutil/parallelwork.cpp')
-rw-r--r--src/zenutil/parallelwork.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/zenutil/parallelwork.cpp b/src/zenutil/parallelwork.cpp
index aa806438b..1edca5050 100644
--- a/src/zenutil/parallelwork.cpp
+++ b/src/zenutil/parallelwork.cpp
@@ -33,6 +33,7 @@ ParallelWork::~ParallelWork()
"ParallelWork disposed without explicit wait for completion, likely caused by an exception, waiting for dispatched threads "
"to complete");
m_PendingWork.CountDown();
+ m_DispatchComplete = true;
}
m_PendingWork.Wait();
ptrdiff_t RemainingWork = m_PendingWork.Remaining();
@@ -82,10 +83,9 @@ void
ParallelWork::Wait(int32_t UpdateIntervalMS, UpdateCallback&& UpdateCallback)
{
ZEN_ASSERT(!m_DispatchComplete);
- m_DispatchComplete = true;
-
ZEN_ASSERT(m_PendingWork.Remaining() > 0);
m_PendingWork.CountDown();
+ m_DispatchComplete = true;
while (!m_PendingWork.Wait(UpdateIntervalMS))
{
@@ -99,10 +99,10 @@ void
ParallelWork::Wait()
{
ZEN_ASSERT(!m_DispatchComplete);
- m_DispatchComplete = true;
-
ZEN_ASSERT(m_PendingWork.Remaining() > 0);
m_PendingWork.CountDown();
+ m_DispatchComplete = true;
+
m_PendingWork.Wait();
RethrowErrors();