aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--src/zenutil/parallelwork.cpp8
2 files changed, 5 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82ecc9470..1792e8a5f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
##
- Improvement: Add validation of cache bucket metadata manifest when reading legacy format
+- Improvement: Don't set m_DispatchComplete in ParallelWork until after pending work countdown succeeds
- Bugfix: Parents were not notified when successfully attaching to an existing server instance
## 5.6.14
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();