From 2db50724a3640f86ecdb50aaabeec5e779417968 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 27 Jun 2006 05:00:48 +0000 Subject: [PATCH] fix concurrent loading assert --- stepmania/src/ScreenManager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index fb69d09806..cca39acb01 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -512,9 +512,6 @@ Screen* ScreenManager::MakeNewScreen( const RString &sScreenName ) LOG->Trace( "Loaded '%s' ('%s') in %f", sScreenName.c_str(), sClassName.c_str(), t.GetDeltaTime() ); - // Screens may not call SetNewScreen from the ctor or Init(). - ASSERT_M( m_sDelayedScreen.empty(), m_sDelayedScreen ); - return ret; } @@ -722,6 +719,12 @@ void ScreenManager::LoadDelayedScreen() if( !bLoaded ) { PrepareScreen( sScreenName ); + + // Screens may not call SetNewScreen from the ctor or Init(). (We don't do this + // check inside PrepareScreen; that may be called from a thread for concurrent + // loading, and the main thread may call SetNewScreen during that time.) + ASSERT_M( m_sDelayedScreen.empty(), m_sDelayedScreen ); + bLoaded = ActivatePreparedScreenAndBackground( sScreenName ); ASSERT( bLoaded ); }