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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sun Jan 3 19:06:48 CET 2010


Revision: 46937
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46937&view=rev
Author:   thebluegr
Date:     2010-01-03 18:06:48 +0000 (Sun, 03 Jan 2010)

Log Message:
-----------
SCI/new music code: Proper handling of disposed sounds when loading a saved game. Also, addressed a possible mutex issue with cmdPauseSound

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

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-03 18:04:52 UTC (rev 46936)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-03 18:06:48 UTC (rev 46937)
@@ -277,6 +277,8 @@
 	newSound->resnum = number;
 	if (number && _resMan->testResource(ResourceId(kResourceTypeSound, number)))
 		newSound->soundRes = new SoundResource(number, _resMan, _soundVersion);
+	else
+		newSound->soundRes = 0;
 	newSound->soundObj = obj;
 	newSound->loop = GET_SEL32V(_segMan, obj, loop);
 	newSound->prio = GET_SEL32V(_segMan, obj, pri) & 0xFF;
@@ -514,6 +516,8 @@
 		changeSoundStatus(obj, value ? SOUND_STATUS_SUSPENDED : SOUND_STATUS_PLAYING);
 #else
 
+	Common::StackLock lock(_music->_mutex);
+
 	MusicEntry *musicSlot = NULL;
 	MusicList::iterator slotLoop = NULL;
 
@@ -532,8 +536,6 @@
 		}
 	}
 
-	Common::StackLock lock(_music->_mutex);
-
 	do {
 		if (_soundVersion <= SCI_VERSION_0_LATE) {
 			PUT_SEL32V(_segMan, musicSlot->soundObj, state, kSoundPaused);
@@ -1023,8 +1025,12 @@
 				(*i)->volume = GET_SEL32V(_segMan, (*i)->soundObj, vol);
 		}
 
-		(*i)->soundRes = new SoundResource((*i)->resnum, _resMan, _soundVersion);
-		_music->soundInitSnd(*i);
+		if ((*i)->resnum && _resMan->testResource(ResourceId(kResourceTypeSound, (*i)->resnum))) {
+			(*i)->soundRes = new SoundResource((*i)->resnum, _resMan, _soundVersion);
+			_music->soundInitSnd(*i);
+		} else {
+			(*i)->soundRes = 0;
+		}
 		if ((*i)->status == kSoundPlaying)
 			cmdPlaySound((*i)->soundObj, 0);
 	}


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