From 50e180851e07c44a08f20d66f0a95d421573792c Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Sun, 5 Jun 2011 22:54:45 +0200 Subject: [PATCH] [loading window] Let's try to dodge a crash when existing while reloading songs. --- src/ScreenReloadSongs.cpp | 9 ++++++++- src/ScreenReloadSongs.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ScreenReloadSongs.cpp b/src/ScreenReloadSongs.cpp index e5db726fdb..1f2528d996 100644 --- a/src/ScreenReloadSongs.cpp +++ b/src/ScreenReloadSongs.cpp @@ -15,6 +15,8 @@ * computer while songs load. */ REGISTER_SCREEN_CLASS( ScreenReloadSongs ); +ScreenReloadSongs::ScreenReloadSongs() : loadComplete(false) {} + void ScreenReloadSongs::Init() { Screen::Init(); @@ -33,7 +35,11 @@ void ScreenReloadSongs::Init() ScreenReloadSongs::~ScreenReloadSongs() { - //m_loadingThread.Halt(true); + if(!loadComplete) { + //we where going to crash if we let this one lose, so "only" + //leaving stuff possibly corrupted isn't worse. + m_loadingThread.Halt(true); + } RemoveChild(loadWin); delete loadWin; } @@ -45,6 +51,7 @@ int ScreenReloadSongs::loadingThreadProc(void *thisAsVoidPtr) { SONGMAN->Reload( false ); SCREENMAN->PostMessageToTopScreen( SM_GoToNextScreen, 0 ); + self->loadComplete=true; return 0; } diff --git a/src/ScreenReloadSongs.h b/src/ScreenReloadSongs.h index 5c3733aae3..8c145ddfe5 100644 --- a/src/ScreenReloadSongs.h +++ b/src/ScreenReloadSongs.h @@ -9,9 +9,11 @@ class InGameLoadingWindow; class ScreenReloadSongs: public Screen { public: + ScreenReloadSongs(); virtual void Init(); ~ScreenReloadSongs(); private: + bool loadComplete; InGameLoadingWindow *loadWin; RageThread m_loadingThread; static int loadingThreadProc(void *thisAsVoidPtr);