From 462524bcaea47462d881a7e124e4a0ceb4e783a8 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Thu, 6 Jun 2013 23:57:21 +0000 Subject: [PATCH] attempt to fix titi's segfault when reloading and exiting custom menu --- source/glest_game/menu/menu_state_custom_game.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 93f5c61dd..5cb52796e 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -939,11 +939,13 @@ void MenuStateCustomGame::cleanup() { if(forceWaitForShutdown == true) { time_t elapsed = time(NULL); publishToMasterserverThread->signalQuit(); - for(;publishToMasterserverThread->canShutdown(false) == false && + for(;(publishToMasterserverThread->canShutdown(false) == false || + publishToMasterserverThread->getRunningStatus() == true) && difftime((long int)time(NULL),elapsed) <= 15;) { //sleep(150); } - if(publishToMasterserverThread->canShutdown(true)) { + if(publishToMasterserverThread->canShutdown(true) == true && + publishToMasterserverThread->getRunningStatus() == false) { delete publishToMasterserverThread; if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); } @@ -955,6 +957,9 @@ void MenuStateCustomGame::cleanup() { if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"%s",szBuf); publishToMasterserverThread->setOverrideShutdownTask(shutdownTaskStatic); + publishToMasterserverThread->setDeleteSelfOnExecutionDone(true); + publishToMasterserverThread->setDeleteAfterExecute(true); + //publishToMasterserverThread->cleanup(); } publishToMasterserverThread = NULL; @@ -963,7 +968,7 @@ void MenuStateCustomGame::cleanup() { publishToMasterserverThread->signalQuit(); sleep(0); if(publishToMasterserverThread->canShutdown(true) == true && - publishToMasterserverThread->shutdownAndWait() == true) { + publishToMasterserverThread->getRunningStatus() == false) { delete publishToMasterserverThread; } else { @@ -974,6 +979,8 @@ void MenuStateCustomGame::cleanup() { if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"%s",szBuf); publishToMasterserverThread->setOverrideShutdownTask(shutdownTaskStatic); + publishToMasterserverThread->setDeleteSelfOnExecutionDone(true); + publishToMasterserverThread->setDeleteAfterExecute(true); //publishToMasterserverThread->cleanup(); } }