diff options
| author | Dan Engelbrecht <[email protected]> | 2025-08-04 18:37:52 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-08-04 18:37:52 +0200 |
| commit | d71932a6ec3aabd2515e4eb94c0d88dc428a41f2 (patch) | |
| tree | 4200a8231a6c699f08a24aefc64ac882ffc6ce54 | |
| parent | add hardening for legacy cache bucket manifests (#454) (diff) | |
| download | zen-d71932a6ec3aabd2515e4eb94c0d88dc428a41f2.tar.xz zen-d71932a6ec3aabd2515e4eb94c0d88dc428a41f2.zip | |
Don't set m_DispatchComplete in ParallelWork until after pending work countdown succeeds (#455)
| -rw-r--r-- | CHANGELOG.md | 1 | ||||
| -rw-r--r-- | src/zenutil/parallelwork.cpp | 8 |
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(); |