diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 84e49e2e6c..5a17f6395e 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -152,7 +152,7 @@ void GameState::Reset() /* We may have cached trails from before everything was loaded (eg. from before * SongManager::UpdateBest could be called). Erase the cache. */ - SONGMAN->RegenRandomTrailEntries(); + SONGMAN->FlushCaches(); g_vPlayedStageStats.clear(); diff --git a/stepmania/src/SongManager.cpp b/stepmania/src/SongManager.cpp index 5ba8eb0032..37524a5609 100644 --- a/stepmania/src/SongManager.cpp +++ b/stepmania/src/SongManager.cpp @@ -661,24 +661,18 @@ void SongManager::Cleanup() pSteps->Compress(); } } +} - // FIXME - /* Why was this commented out? If this isn't done, we'll have stale Steps* in - * course caches, and we'll crash later. */ +/* Flush all Song*, Steps* and Course* caches. This is called on reload, and when + * any of those are removed or changed. This doesn't touch GAMESTATE and StageStats + * pointers, which are updated explicitly in Song::RevertFromDisk. */ +void SongManager::FlushCaches() +{ /* Erase cached course info. */ for( unsigned i=0; i < m_pCourses.size(); i++ ) m_pCourses[i]->RegenTrails(); - StepsID::FlushCache(); -} -void SongManager::RegenRandomTrailEntries() -{ - /* Regenerate Trails so that any random entires get re-picked. */ - for( unsigned i=0; i < m_pCourses.size(); i++ ) - { - // FIXME: only regen entries that are random - not all entries - m_pCourses[i]->RegenTrails(); - } + StepsID::FlushCache(); } void SongManager::SetPreferences() diff --git a/stepmania/src/SongManager.h b/stepmania/src/SongManager.h index 15fdf9ed9b..069656d226 100644 --- a/stepmania/src/SongManager.h +++ b/stepmania/src/SongManager.h @@ -25,7 +25,7 @@ public: void InitSongsFromDisk( LoadingWindow *ld ); void FreeSongs(); void Cleanup(); - void RegenRandomTrailEntries(); + void FlushCaches(); void SetPreferences(); void LoadAllFromProfiles(); // song, edits