[Scummvm-cvs-logs] SF.net SVN: scummvm: [23159] scummvm/trunk/engines/sky/music

eriktorbjorn at users.sourceforge.net eriktorbjorn at users.sourceforge.net
Sat Jun 17 17:54:49 CEST 2006


Revision: 23159
Author:   eriktorbjorn
Date:     2006-06-17 08:54:40 -0700 (Sat, 17 Jun 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=23159&view=rev

Log Message:
-----------
The stopMusic() function (which is publicly accessable from the outside) now
locks the mutex to avoid pulling the proverbial rug out from beneath the timer
callback's proverbial feet. To stop the music when the mutex is already locked,
we use stopMusicInternal(), which is a protected function. This will hopefully
fix the crash on exit which has happened to me every few months.

Modified Paths:
--------------
    scummvm/trunk/engines/sky/music/musicbase.cpp
    scummvm/trunk/engines/sky/music/musicbase.h
Modified: scummvm/trunk/engines/sky/music/musicbase.cpp
===================================================================
--- scummvm/trunk/engines/sky/music/musicbase.cpp	2006-06-17 07:54:18 UTC (rev 23158)
+++ scummvm/trunk/engines/sky/music/musicbase.cpp	2006-06-17 15:54:40 UTC (rev 23159)
@@ -47,7 +47,7 @@
 
 	_mutex.lock();
 	if (_currentMusic)
-		stopMusic();
+		stopMusicInternal();
 	if (_musicData)
 		free(_musicData);
 	_currentSection = pSection;
@@ -82,6 +82,13 @@
 
 void MusicBase::stopMusic(void) {
 
+	_mutex.lock();
+	stopMusicInternal();
+	_mutex.unlock();
+}
+
+void MusicBase::stopMusicInternal(void) {
+
 	for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) {
 		_channels[cnt]->stopNote();
 		delete _channels[cnt];
@@ -105,7 +112,7 @@
 		return;
 	}
 	if (_currentMusic != 0)
-		stopMusic();
+		stopMusicInternal();
 
 	_currentMusic = _onNextPoll.musicToProcess;
 
@@ -128,7 +135,7 @@
 	_mutex.lock();
 	uint8 newTempo;
 	if (_onNextPoll.doReInit) startDriver();
-	if (_onNextPoll.doStopMusic) stopMusic();
+	if (_onNextPoll.doStopMusic) stopMusicInternal();
 	if (_onNextPoll.musicToProcess != _currentMusic)
 		loadNewMusic();
 

Modified: scummvm/trunk/engines/sky/music/musicbase.h
===================================================================
--- scummvm/trunk/engines/sky/music/musicbase.h	2006-06-17 07:54:18 UTC (rev 23158)
+++ scummvm/trunk/engines/sky/music/musicbase.h	2006-06-17 15:54:40 UTC (rev 23159)
@@ -85,6 +85,8 @@
 	void updateTempo(void);
 	void loadNewMusic(void);
 	void pollMusic(void);
+
+	void stopMusicInternal(void);
 };
 
 } // End of namespace Sky


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