[Scummvm-cvs-logs] SF.net SVN: scummvm:[46579] scummvm/trunk/engines/sci

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat Dec 26 14:20:07 CET 2009


Revision: 46579
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46579&view=rev
Author:   thebluegr
Date:     2009-12-26 13:20:07 +0000 (Sat, 26 Dec 2009)

Log Message:
-----------
Hopefully fixed the freezes/deadlocks in the new music code (e.g. in LSL5 and Castle of Dr. Brain)

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

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-12-26 13:20:07 UTC (rev 46579)
@@ -628,12 +628,11 @@
 
 	if (s.isLoading()) {
 		music->stopAll();
-		music->resizeList(songcount);
 
 		for (int i = 0; i < songcount; i++) {
 			MusicEntry *curSong = new MusicEntry();
 			syncSong(s, curSong);
-			music->setSlot(i, curSong);
+			music->pushBackSlot(curSong);
 		}
 	} else {
 		for (int i = 0; i < songcount; i++) {

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2009-12-26 13:20:07 UTC (rev 46579)
@@ -43,6 +43,10 @@
 
 SciMusic::SciMusic(SciVersion soundVersion)
 	: _soundVersion(soundVersion) {
+
+	// Reserve some space in the playlist, to avoid expensive insertion
+	// operations
+	_playList.reserve(10);
 }
 
 SciMusic::~SciMusic() {
@@ -370,6 +374,8 @@
 }
 //---------------------------------------------
 void SciMusic::doFade(MusicEntry *pSnd) {
+	// This is called from inside onTimer, where the mutex is already locked
+
 	if (pSnd->fadeTicker)
 		pSnd->fadeTicker--;
 	else {
@@ -401,10 +407,13 @@
 		_pMixer->playInputStream(Audio::Mixer::kSFXSoundType, &pSnd->hCurrentAud,
 				pSnd->pStreamAud, -1, pSnd->volume, 0, false);
 	} else if (pSnd->pMidiParser) {
+		_mutex.lock();
 		pSnd->pMidiParser->setVolume(pSnd->volume);
 		if (pSnd->status == kSndStatusStopped)
 			pSnd->pMidiParser->jumpToTick(0);
+		_mutex.unlock();
 	}
+
 	pSnd->status = kSndStatusPlaying;
 }
 //---------------------------------------------
@@ -434,9 +443,8 @@
 //---------------------------------------------
 void SciMusic::soundKill(MusicEntry *pSnd) {
 
-	_mutex.lock();
+	pSnd->status = kSndStatusStopped;
 
-	pSnd->status = kSndStatusStopped;
 	if (pSnd->pMidiParser) {
 		pSnd->pMidiParser->unloadMusic();
 		delete pSnd->pMidiParser;
@@ -447,6 +455,8 @@
 		pSnd->pStreamAud = NULL;
 	}
 
+	_mutex.lock();
+
 	uint sz = _playList.size(), i;
 	// Remove sound from playlist
 	for (i = 0; i < sz; i++) {
@@ -459,7 +469,6 @@
 	}
 
 	_mutex.unlock();
-
 }
 //---------------------------------------------
 void SciMusic::soundPause(MusicEntry *pSnd) {

Modified: scummvm/trunk/engines/sci/sfx/music.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.h	2009-12-26 11:54:57 UTC (rev 46578)
+++ scummvm/trunk/engines/sci/sfx/music.h	2009-12-26 13:20:07 UTC (rev 46579)
@@ -135,11 +135,6 @@
 	}
 
 	MusicEntry *getSlot(int slot) { return _playList[slot]; }
-	void setSlot(uint32 slot, MusicEntry *slotEntry) {
-		_mutex.lock();
-		_playList[slot] = slotEntry;
-		_mutex.unlock();
-	}
 
 	void pushBackSlot(MusicEntry *slotEntry) {
 		_mutex.lock();
@@ -149,12 +144,6 @@
 
 	uint32 listSize() { return _playList.size(); }
 
-	void resizeList(uint32 newSize) {
-		_mutex.lock();
-		_playList.resize(newSize);
-		_mutex.unlock();
-	}
-
 	uint16 _savelen;
 
 protected:


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