diff --git a/stepmania/src/RageSound.cpp b/stepmania/src/RageSound.cpp index 1462a303c8..17d1e2353d 100644 --- a/stepmania/src/RageSound.cpp +++ b/stepmania/src/RageSound.cpp @@ -335,26 +335,8 @@ void RageSound::StopPlaying() if( !m_bPlaying ) return; - m_iStoppedSourceFrame = (int) GetPositionSecondsInternal(); - /* Tell the sound driver to stop mixing this sound. */ SOUNDMAN->StopMixing(this); - - /* Lock the mutex after calling UnregisterPlayingSound. We must not make driver - * calls with our mutex locked (driver mutex < sound mutex). Nobody else will - * see our sound as not playing until we set playing = false. */ - m_Mutex.Lock(); - -// LOG->Trace("set playing false for %p (StopPlaying) (%s)", this, this->GetLoadedFilePath().c_str()); - m_bPlaying = false; - - m_iMaxDriverFrame = 0; - m_HardwareToStreamMap.Clear(); - m_StreamToSourceMap.Clear(); - -// LOG->Trace("StopPlaying %p finished (%s)", this, this->GetLoadedFilePath().c_str()); - - m_Mutex.Unlock(); } /* This is similar to StopPlaying, except it's called by sound drivers when we're done diff --git a/stepmania/src/arch/Sound/RageSoundDriver_Generic_Software.cpp b/stepmania/src/arch/Sound/RageSoundDriver_Generic_Software.cpp index 1b8f1e818b..2f671588aa 100644 --- a/stepmania/src/arch/Sound/RageSoundDriver_Generic_Software.cpp +++ b/stepmania/src/arch/Sound/RageSoundDriver_Generic_Software.cpp @@ -359,7 +359,7 @@ void RageSoundDriver::StartMixing( RageSoundBase *pSound ) void RageSoundDriver::StopMixing( RageSoundBase *pSound ) { /* Lock, to make sure the decoder thread isn't running on this sound while we do this. */ - LockMut( m_Mutex ); + m_Mutex.Lock(); /* Find the sound. */ unsigned i; @@ -368,6 +368,7 @@ void RageSoundDriver::StopMixing( RageSoundBase *pSound ) break; if( i == ARRAYLEN(m_Sounds) ) { + m_Mutex.Unlock(); LOG->Trace( "not stopping a sound because it's not playing" ); return; } @@ -375,6 +376,7 @@ void RageSoundDriver::StopMixing( RageSoundBase *pSound ) /* If we're already in STOPPED, there's nothing to do. */ if( m_Sounds[i].m_State == Sound::STOPPED ) { + m_Mutex.Unlock(); LOG->Trace( "not stopping a sound because it's already in STOPPED" ); return; } @@ -389,6 +391,10 @@ void RageSoundDriver::StopMixing( RageSoundBase *pSound ) * it. Once this call returns, the sound may no longer exist. */ m_Sounds[i].m_pSound = NULL; // LOG->Trace("end StopMixing"); + + m_Mutex.Unlock(); + + pSound->SoundIsFinishedPlaying(); }