În timpul procesului de anulare a cronometrelor serverului, poate apărea o blocare pe un nucleu din cauza unui comportament incorect al iteratorului. Mai exact, atunci când un cronometru este șters din hartă folosind erase(), iteratorul este deja avansat automat. Dacă în același ciclu acesta este incrementat din nou, rezultatul este un comportament indefinit.
Pentru a preveni această problemă, o abordare sigură constă în colectarea prealabilă a cronometrelor ce trebuie eliminate, urmată de ștergerea lor într-o etapă separată, după finalizarea parcurgerii. O alternativă este utilizarea unui contor care se incrementează la fiecare iterație, permițând eliminarea directă pe baza poziției determinate de contor, fără a afecta structura iteratorilor.
Această situație tinde să apară în special după actualizarea codului la C++11 sau versiuni mai noi, unde comportamentul iteratorilor a devenit mai strict.
Înlocuiți următoarea funcție din questmanager.cpp:
Prima variantă:
A doua variantă:
Pentru C++20: