From 058695b9697be2baef5366b99544ff8a040ef913 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Wed, 7 Apr 2004 03:31:27 +0000 Subject: [PATCH] simplify: get rid of sounds_to_delete --- stepmania/src/RageSoundManager.cpp | 26 ++++++++++++-------------- stepmania/src/RageSoundManager.h | 5 +---- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/stepmania/src/RageSoundManager.cpp b/stepmania/src/RageSoundManager.cpp index e2e98658b9..c077d59c5b 100644 --- a/stepmania/src/RageSoundManager.cpp +++ b/stepmania/src/RageSoundManager.cpp @@ -41,7 +41,7 @@ RageSoundManager::~RageSoundManager() { lock.Lock(); /* Clear any sounds that we own and havn't freed yet. */ - set::iterator j = owned_sounds.begin(); + set::iterator j = owned_sounds.begin(); while(j != owned_sounds.end()) delete *(j++); lock.Unlock(); @@ -58,16 +58,6 @@ void RageSoundManager::StartMixing( RageSoundBase *snd ) void RageSoundManager::StopMixing( RageSoundBase *snd ) { driver->StopMixing(snd); - - /* The sound is finished, and should be deleted if it's in owned_sounds. - * However, this call might be *from* the sound itself, and it'd be - * a mess to delete it while it's on the call stack. Instead, put it - * in a queue to delete, and delete it on the next update. */ - LockMut(lock); - if(owned_sounds.find(snd) != owned_sounds.end()) { - sounds_to_delete.insert(snd); - owned_sounds.erase(snd); - } } int64_t RageSoundManager::GetPosition( const RageSoundBase *snd ) const @@ -81,10 +71,18 @@ void RageSoundManager::Update(float delta) FlushPosMapQueue(); - while(!sounds_to_delete.empty()) + /* Scan the owned_sounds list for sounds that are no longer playing, and delete them. */ + set::iterator it = owned_sounds.begin(), next = it; + ++next; + while( it != owned_sounds.end() ) { - delete *sounds_to_delete.begin(); - sounds_to_delete.erase(sounds_to_delete.begin()); + if( !(*it)->IsPlaying() ) + { + delete *it; + owned_sounds.erase( it ); + } + it = next; + ++next; } for(set::iterator i = all_sounds.begin(); diff --git a/stepmania/src/RageSoundManager.h b/stepmania/src/RageSoundManager.h index 99c58510a4..ed9993ed1d 100644 --- a/stepmania/src/RageSoundManager.h +++ b/stepmania/src/RageSoundManager.h @@ -16,10 +16,7 @@ class RageSoundManager { /* Set of sounds that we've taken over (and are responsible for deleting * when they're finished playing): */ - set owned_sounds; - - /* Set of sounds that are finished and should be deleted. */ - set sounds_to_delete; + set owned_sounds; RageSoundDriver *driver;