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);