From 6f412df2327174b4c2f1e36007d6dbf79376bb7e Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 4 Jul 2016 17:02:39 +0200 Subject: [PATCH] Fixed lockups when calling StartSuspend multiple times --- src/level/robotmain.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 36ee5031..2aab95c9 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -1554,11 +1554,13 @@ char* CRobotMain::GetDisplayInfoName(int index) //! Beginning of a dialogue during the game void CRobotMain::StartSuspend() { + if (m_suspend != nullptr) return; // already suspended if (!IsPhaseWithWorld(m_phase)) return; + GetLogger()->Info("Start suspend\n"); m_sound->MuteAll(true); ClearInterface(); - m_suspend = m_pause->ActivatePause(PAUSE_ENGINE|PAUSE_HIDE_SHORTCUTS|PAUSE_MUTE_SOUND|PAUSE_CAMERA); + m_suspend = m_pause->ActivatePause(PAUSE_ENGINE | PAUSE_HIDE_SHORTCUTS | PAUSE_MUTE_SOUND | PAUSE_CAMERA); m_engine->SetOverFront(false); // over flat behind CreateShortcuts(); @@ -1572,6 +1574,9 @@ void CRobotMain::StartSuspend() //! End of dialogue during the game void CRobotMain::StopSuspend() { + if (m_suspend == nullptr) return; // not suspended + GetLogger()->Info("Stop suspend\n"); + m_sound->MuteAll(false); ClearInterface(); m_pause->DeactivatePause(m_suspend); @@ -1579,7 +1584,7 @@ void CRobotMain::StopSuspend() m_engine->SetOverFront(true); // over flat front CreateShortcuts(); - if(m_infoObject != nullptr) + if (m_infoObject != nullptr) SelectObject(m_infoObject, false); // gives the command buttons m_map->ShowMap(m_mapShow); m_displayText->HideText(false);