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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Jan 4 15:43:19 CET 2010


Revision: 46971
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46971&view=rev
Author:   thebluegr
Date:     2010-01-04 14:43:14 +0000 (Mon, 04 Jan 2010)

Log Message:
-----------
SCI/new music: Resolved another possible deadlock when pausing all sounds

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-04 13:50:43 UTC (rev 46970)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-04 14:43:14 UTC (rev 46971)
@@ -529,20 +529,24 @@
 		changeSoundStatus(obj, value ? SOUND_STATUS_SUSPENDED : SOUND_STATUS_PLAYING);
 #else
 
-	Common::StackLock lock(_music->_mutex);
-
 	MusicEntry *musicSlot = NULL;
 	MusicList::iterator slotLoop = NULL;
+	MusicList::iterator listEnd = NULL;
 
 	if (!obj.segment) {
 		// Pausing/Resuming the whole playlist was introduced 
 		// in the SCI1 late sound scheme
 		if (_soundVersion <= SCI_VERSION_1_EARLY)
 			return;
+		_music->_mutex.lock();
 		slotLoop = _music->getPlayListStart();
+		listEnd = _music->getPlayListEnd();
 		musicSlot = *slotLoop;
+		_music->_mutex.unlock();
 	} else {
+		_music->_mutex.lock();
 		musicSlot = _music->getSlot(obj);
+		_music->_mutex.unlock();
 		if (!musicSlot) {
 			warning("cmdPauseSound: Slot not found (%04x:%04x)", PRINT_REG(obj));
 			return;
@@ -561,10 +565,13 @@
 		}
 
 		if (slotLoop) {
-			if (slotLoop == _music->getPlayListEnd())
+			if (slotLoop == listEnd) {
 				break;
-			else
+			} else {
+				_music->_mutex.lock();
 				musicSlot = *(slotLoop++);
+				_music->_mutex.unlock();
+			}
 		}
 	} while (slotLoop);
 


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