From 0c45417de131fbea43e98212bfdac1069a901c0c Mon Sep 17 00:00:00 2001 From: Karel Donk Date: Wed, 4 Sep 2019 17:30:50 -0300 Subject: [PATCH] Iteration fix --- .../KeyGeneration/KeyGenerationManager.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/QuantumGateLib/Core/KeyGeneration/KeyGenerationManager.cpp b/QuantumGateLib/Core/KeyGeneration/KeyGenerationManager.cpp index f00578da..cf0ccf5a 100644 --- a/QuantumGateLib/Core/KeyGeneration/KeyGenerationManager.cpp +++ b/QuantumGateLib/Core/KeyGeneration/KeyGenerationManager.cpp @@ -268,18 +268,24 @@ namespace QuantumGate::Implementation::Core::KeyGeneration { m_KeyQueues.WithUniqueLock([&](KeyQueueMap& queues) { - for (auto it = queues.begin(); it != queues.end() && !shutdown_event.IsSet(); ++it) + auto it = queues.begin(); + while (it != queues.end() && !shutdown_event.IsSet()) { - auto active = false; - Size num_pending_events{ 0 }; + auto erase = false; it->second->WithUniqueLock([&](KeyQueue& key_queue) { - active = key_queue.Active; - num_pending_events = key_queue.NumPendingEvents; + if (!key_queue.Active && key_queue.NumPendingEvents == 0) + { + erase = true; + } }); - if (!active && num_pending_events == 0) it = queues.erase(it); + if (erase) + { + it = queues.erase(it); + } + else ++it; } });