[Scummvm-cvs-logs] SF.net SVN: scummvm: [29705] scummvm/trunk/engines/scumm/imuse_digi/ dimuse_track.cpp

cyx at users.sourceforge.net cyx at users.sourceforge.net
Sun Dec 2 15:34:33 CET 2007


Revision: 29705
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29705&view=rev
Author:   cyx
Date:     2007-12-02 06:34:33 -0800 (Sun, 02 Dec 2007)

Log Message:
-----------
revised mutex handling a bit in dimuse :
- protected access to Track.used in startSound
- removed mutex lock in cloneToFadeOutTrack as it's always called with mutex already locked on (shouldn't change anything, though, due to mutex re-entrancy)

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp

Modified: scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp
===================================================================
--- scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2007-12-02 13:16:40 UTC (rev 29704)
+++ scummvm/trunk/engines/scumm/imuse_digi/dimuse_track.cpp	2007-12-02 14:34:33 UTC (rev 29705)
@@ -80,12 +80,17 @@
 	}
 
 	Track *track = _track[l];
-	while (track->used) {
+	while (1) {
+		_mutex.lock();
+		if (!track->used) {
+			break;
+		}
 		// The designated track is not yet available. So, we call flushTracks()
 		// to get it processed (and thus made ready for us). Since the actual
 		// processing is done by another thread, we also call parseEvents to
 		// give it some time (and to avoid busy waiting/looping).
 		flushTracks();
+		_mutex.unlock();
 #ifndef __PLAYSTATION2__
 		_vm->parseEvents();
 #endif
@@ -186,6 +191,7 @@
 	}
 
 	track->used = true;
+	_mutex.unlock();
 }
 
 void IMuseDigital::setPriority(int soundId, int priority) {
@@ -309,7 +315,6 @@
 }
 
 IMuseDigital::Track *IMuseDigital::cloneToFadeOutTrack(const Track *track, int fadeDelay) {
-	Common::StackLock lock(_mutex, "IMuseDigital::cloneToFadeOutTrack()");
 	assert(track);
 	Track *fadeTrack = 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