[Scummvm-cvs-logs] SF.net SVN: scummvm:[46869] scummvm/trunk/engines/sci/sfx/music.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat Jan 2 01:45:56 CET 2010


Revision: 46869
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46869&view=rev
Author:   thebluegr
Date:     2010-01-02 00:45:55 +0000 (Sat, 02 Jan 2010)

Log Message:
-----------
SCI/new music code: Fixed some mutex-related issues

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sfx/music.cpp

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-02 00:22:46 UTC (rev 46868)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-02 00:45:55 UTC (rev 46869)
@@ -118,6 +118,8 @@
 }
 
 void SciMusic::soundSetSoundOn(bool soundOnFlag) {
+	Common::StackLock lock(_mutex);
+
 	_soundOn = soundOnFlag;
 	_pMidiDrv->playSwitch(soundOnFlag);
 }
@@ -160,6 +162,8 @@
 }
 
 void SciMusic::resetDriver() {
+	Common::StackLock lock(_mutex);
+
 	_pMidiDrv->close();
 	_pMidiDrv->open();
 	_pMidiDrv->setTimerCallback(this, &miditimerCallback);
@@ -387,11 +391,13 @@
 			pSnd->pStreamAud->setNumLoops(1);
 		_pMixer->playInputStream(pSnd->soundType, &pSnd->hCurrentAud,
 				pSnd->pStreamAud, -1, pSnd->volume, 0, false);
-	} else if (pSnd->pMidiParser) {
+	} else {
 		_mutex.lock();
-		pSnd->pMidiParser->setVolume(pSnd->volume);
-		if (pSnd->status == kSoundStopped)
-			pSnd->pMidiParser->jumpToTick(0);
+		if (pSnd->pMidiParser) {
+			pSnd->pMidiParser->setVolume(pSnd->volume);
+			if (pSnd->status == kSoundStopped)
+				pSnd->pMidiParser->jumpToTick(0);
+		}
 		_mutex.unlock();
 	}
 
@@ -430,13 +436,14 @@
 void SciMusic::soundKill(MusicEntry *pSnd) {
 	pSnd->status = kSoundStopped;
 
+	_mutex.lock();
 	if (pSnd->pMidiParser) {
-		_mutex.lock();
 		pSnd->pMidiParser->unloadMusic();
 		delete pSnd->pMidiParser;
 		pSnd->pMidiParser = NULL;
-		_mutex.unlock();
 	}
+	_mutex.unlock();
+
 	if (pSnd->pStreamAud) {
 		_pMixer->stopHandle(pSnd->hCurrentAud);
 		pSnd->pStreamAud = NULL;
@@ -463,9 +470,10 @@
 	pSnd->status = kSoundPaused;
 	if (pSnd->pStreamAud) {
 		_pMixer->pauseHandle(pSnd->hCurrentAud, true);
-	} else if (pSnd->pMidiParser) {
+	} else {
 		_mutex.lock();
-		pSnd->pMidiParser->pause();
+		if (pSnd->pMidiParser)
+			pSnd->pMidiParser->pause();
 		_mutex.unlock();
 	}
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list