1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Attempt to trace crash caused by iterator invalidation

This commit is contained in:
Ivan Savenko 2023-03-05 15:47:44 +02:00
parent d34268d7d5
commit 5fb5513572

View File

@ -98,9 +98,12 @@ void CGuiHandler::init()
pointerSpeedMultiplier = settings["general"]["relativePointerSpeedMultiplier"].Float();
}
static bool debugDetectDeactivationDuringHandle = false;
void CGuiHandler::handleElementActivate(CIntObject * elem, ui16 activityFlag)
{
processLists(activityFlag,[&](std::list<CIntObject*> * lst){
assert(debugDetectDeactivationDuringHandle == false);
lst->push_front(elem);
});
elem->active_m |= activityFlag;
@ -109,6 +112,7 @@ void CGuiHandler::handleElementActivate(CIntObject * elem, ui16 activityFlag)
void CGuiHandler::handleElementDeActivate(CIntObject * elem, ui16 activityFlag)
{
processLists(activityFlag,[&](std::list<CIntObject*> * lst){
assert(debugDetectDeactivationDuringHandle == false);
auto hlp = std::find(lst->begin(),lst->end(),elem);
assert(hlp != lst->end());
lst->erase(hlp);
@ -594,6 +598,7 @@ void CGuiHandler::handleMouseMotion(const SDL_Event & current)
//sending active, hovered hoverable objects hover() call
std::vector<CIntObject*> hlp;
debugDetectDeactivationDuringHandle = true;
auto hoverableCopy = hoverable;
for(auto & elem : hoverableCopy)
{
@ -608,6 +613,7 @@ void CGuiHandler::handleMouseMotion(const SDL_Event & current)
(elem)->hovered = false;
}
}
debugDetectDeactivationDuringHandle = false;
assert(hoverableCopy == hoverable);
for(auto & elem : hlp)