[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