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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Fri Dec 25 16:44:25 CET 2009


Revision: 46556
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46556&view=rev
Author:   thebluegr
Date:     2009-12-25 15:44:25 +0000 (Fri, 25 Dec 2009)

Log Message:
-----------
Added mutexes in music functions

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

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-25 15:24:35 UTC (rev 46555)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-25 15:44:25 UTC (rev 46556)
@@ -128,12 +128,14 @@
 }
 //----------------------------------------
 void SciMusic::stopAll() {
+	_mutex.lock();
 	_pMixer->stopAll();
 	//audioStop();
 	for(uint i = 0; i < _playList.size(); i++){
 		soundStop(_playList[i]);
 		soundKill(_playList[i]);
 	}
+	_mutex.unlock();
 }
 //----------------------------------------
 void SciMusic::miditimerCallback(void *p) {
@@ -282,10 +284,10 @@
 
 //----------------------------------------
 void SciMusic::soundInitSnd(MusicEntry *pSnd) {
+	_mutex.lock();
 	SoundResource::Track *track = NULL;
 	int channelFilterMask = 0;
 
-	//_mutex.lock();
 	switch (_midiType) {
 	case MD_PCSPK:
 		track = pSnd->soundRes->getTrackByType(SoundResource::TRACKTYPE_SPEAKER);
@@ -338,12 +340,12 @@
 		}
 	}
 
-	//_mutex.unlock();
+	_mutex.unlock();
 }
 //----------------------------------------
 void SciMusic::onTimer() {
+	_mutex.lock();
 
-	_mutex.lock();
 	uint sz = _playList.size();
 	for (uint i = 0; i < sz; i++) {
 		if (_playList[i]->status != kSndStatusPlaying)
@@ -368,10 +370,13 @@
 			}
 		}
 	}//for()
+	
 	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::doFade(MusicEntry *pSnd) {
+	_mutex.lock();
+
 	if (pSnd->fadeTicker)
 		pSnd->fadeTicker--;
 	else {
@@ -383,11 +388,14 @@
 			pSnd->volume += pSnd->fadeStep;
 		pSnd->pMidiParser->setVolume(pSnd->volume);
 	}
+
+	_mutex.unlock();
 }
 
 //---------------------------------------------
 void SciMusic::soundPlay(MusicEntry *pSnd) {
-	//_mutex.lock();
+	_mutex.lock();
+
 	uint sz = _playList.size(), i;
 	// searching if sound is already in _playList
 	for (i = 0; i < sz && _playList[i] != pSnd; i++)
@@ -406,33 +414,45 @@
 			pSnd->pMidiParser->jumpToTick(0);
 	}
 	pSnd->status = kSndStatusPlaying;
-	//_mutex.unlock();
+
+	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::soundStop(MusicEntry *pSnd) {
-	//_mutex.lock();
+	_mutex.lock();
+
 	pSnd->status = kSndStatusStopped;
 	if (pSnd->pStreamAud)
 		_pMixer->stopHandle(pSnd->hCurrentAud);
 	if (pSnd->pMidiParser)
 		pSnd->pMidiParser->stop();
-	//_mutex.unlock();
+
+	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::soundSetVolume(MusicEntry *pSnd, byte volume) {
+	_mutex.lock();
+
 	if (pSnd->pStreamAud)
 		_pMixer->setChannelVolume(pSnd->hCurrentAud, volume);
 	else if (pSnd->pMidiParser)
 		pSnd->pMidiParser->setVolume(volume);
+
+	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::soundSetPriority(MusicEntry *pSnd, byte prio) {
+	_mutex.lock();
+
 	pSnd->prio = prio;
 	sortPlayList();
+
+	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::soundKill(MusicEntry *pSnd) {
-	//_mutex.lock();
+	_mutex.lock();
+
 	pSnd->status = kSndStatusStopped;
 	if (pSnd->pMidiParser) {
 		pSnd->pMidiParser->unloadMusic();
@@ -453,15 +473,20 @@
 			break;
 		}
 	}
-	//_mutex.unlock();
+
+	_mutex.unlock();
 }
 //---------------------------------------------
 void SciMusic::soundPause(MusicEntry *pSnd) {
+	_mutex.lock();
+
 	pSnd->status = kSndStatusPaused;
 	if (pSnd->pStreamAud)
 		_pMixer->pauseHandle(pSnd->hCurrentAud, true);
 	else if (pSnd->pMidiParser)
 		pSnd->pMidiParser->pause();
+
+	_mutex.unlock();
 }
 
 //---------------------------------------------
@@ -471,12 +496,16 @@
 }
 //---------------------------------------------
 void SciMusic::soundSetMasterVolume(uint16 vol) {
+	_mutex.lock();
+
 	vol = vol & 0xF; // 0..15
 	vol = vol * Audio::Mixer::kMaxMixerVolume / 0xF;
 	_pMixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, vol);
 	_pMixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, vol);
 	_pMixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, vol);
 	_pMixer->setVolumeForSoundType(Audio::Mixer::kPlainSoundType, vol);
+
+	_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