[Scummvm-cvs-logs] CVS: scummvm/sky/music adlibmusic.cpp,1.3,1.4 adlibmusic.h,1.3,1.4 gmmusic.cpp,1.4,1.5 gmmusic.h,1.3,1.4 mt32music.cpp,1.5,1.6 mt32music.h,1.3,1.4 musicbase.cpp,1.5,1.6 musicbase.h,1.4,1.5

Robert G?ffringmann lavosspawn at users.sourceforge.net
Mon Jun 30 18:28:17 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky/music
In directory sc8-pr-cvs1:/tmp/cvs-serv16442a/sky/music

Modified Files:
	adlibmusic.cpp adlibmusic.h gmmusic.cpp gmmusic.h 
	mt32music.cpp mt32music.h musicbase.cpp musicbase.h 
Log Message:
fixed race condition when loading different sections

Index: adlibmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/adlibmusic.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- adlibmusic.cpp	22 Jun 2003 21:42:59 -0000	1.3
+++ adlibmusic.cpp	1 Jul 2003 01:27:50 -0000	1.4
@@ -27,8 +27,8 @@
 	((SkyAdlibMusic*)param)->premixerCall(buf, len);
 }
 
-SkyAdlibMusic::SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk)
-	: SkyMusicBase(pSkyDisk) {
+SkyAdlibMusic::SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk, OSystem *system)
+	: SkyMusicBase(pSkyDisk, system) {
 
 	_driverFileBase = 60202;
     _mixer = pMixer;

Index: adlibmusic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/adlibmusic.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- adlibmusic.h	22 Jun 2003 21:42:59 -0000	1.3
+++ adlibmusic.h	1 Jul 2003 01:27:50 -0000	1.4
@@ -31,7 +31,7 @@
 
 class SkyAdlibMusic : public SkyMusicBase {
 public:
-	SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk);
+	SkyAdlibMusic(SoundMixer *pMixer, SkyDisk *pSkyDisk, OSystem *system);
 	~SkyAdlibMusic(void);
 	virtual void setVolume(uint8 volume);
 private:

Index: gmmusic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmmusic.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- gmmusic.cpp	22 Jun 2003 21:42:59 -0000	1.4
+++ gmmusic.cpp	1 Jul 2003 01:27:50 -0000	1.5
@@ -26,8 +26,8 @@
 	((SkyGmMusic*)param)->timerCall();
 }
 
-SkyGmMusic::SkyGmMusic(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk)
-	: SkyMusicBase(pSkyDisk) {
+SkyGmMusic::SkyGmMusic(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk, OSystem *system)
+	: SkyMusicBase(pSkyDisk, system) {
 
 	_driverFileBase = 60200;
     _midiDrv = pMidiDrv;

Index: gmmusic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/gmmusic.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- gmmusic.h	22 Jun 2003 21:42:59 -0000	1.3
+++ gmmusic.h	1 Jul 2003 01:27:50 -0000	1.4
@@ -30,7 +30,7 @@
 
 class SkyGmMusic : public SkyMusicBase {
 public:
-	SkyGmMusic(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk);
+	SkyGmMusic(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk, OSystem *system);
 	~SkyGmMusic(void);
 	virtual void setVolume(uint8 volume);
 private:

Index: mt32music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/mt32music.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mt32music.cpp	22 Jun 2003 22:36:28 -0000	1.5
+++ mt32music.cpp	1 Jul 2003 01:27:50 -0000	1.6
@@ -26,8 +26,8 @@
 	((SkyMT32Music*)param)->timerCall();
 }
 
-SkyMT32Music::SkyMT32Music(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk)
-	: SkyMusicBase(pSkyDisk) {
+SkyMT32Music::SkyMT32Music(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk, OSystem *system)
+	: SkyMusicBase(pSkyDisk, system) {
 
 	_driverFileBase = 60200;
     _midiDrv = pMidiDrv;

Index: mt32music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/mt32music.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mt32music.h	22 Jun 2003 21:42:59 -0000	1.3
+++ mt32music.h	1 Jul 2003 01:27:50 -0000	1.4
@@ -30,7 +30,7 @@
 
 class SkyMT32Music : public SkyMusicBase {
 public:
-	SkyMT32Music(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk);
+	SkyMT32Music(MidiDriver *pMidiDrv, SkyDisk *pSkyDisk, OSystem *system);
 	~SkyMT32Music(void);
 private:
 	static void passTimerFunc(void *param);

Index: musicbase.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/musicbase.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- musicbase.cpp	22 Jun 2003 22:00:56 -0000	1.5
+++ musicbase.cpp	1 Jul 2003 01:27:50 -0000	1.6
@@ -21,13 +21,15 @@
 
 #include "musicbase.h"
 
-SkyMusicBase::SkyMusicBase(SkyDisk *pSkyDisk) {
+SkyMusicBase::SkyMusicBase(SkyDisk *pSkyDisk, OSystem *system) {
 
 	_musicData = NULL;
 	_allowedCommands = 0;
 	_skyDisk = pSkyDisk;
 	_currentMusic = 0;
 	_musicVolume = 127;
+	_system = system;
+	_mutex = _system->create_mutex();
 }
 
 SkyMusicBase::~SkyMusicBase(void)
@@ -37,6 +39,7 @@
 
 void SkyMusicBase::loadSection(uint8 pSection)
 {
+	_system->lock_mutex(_mutex);
 	if (_currentMusic) stopMusic();
 	if (_musicData) free(_musicData);
 	_currentSection = pSection;
@@ -51,6 +54,7 @@
 	_numberOfChannels = _currentMusic = 0;
 	setupPointers();
 	startDriver();
+	_system->unlock_mutex(_mutex);
 }
 
 void SkyMusicBase::musicCommand(uint16 command)
@@ -145,6 +149,7 @@
 
 void SkyMusicBase::pollMusic(void)
 {
+	_system->lock_mutex(_mutex);
 	uint8 newTempo;
 	if (_onNextPoll.doReInit) startDriver();
 	if (_onNextPoll.doStopMusic) stopMusic();
@@ -160,5 +165,6 @@
 			updateTempo();
 		}
 	}
+	_system->unlock_mutex(_mutex);
 	_aktTime &= 0xFFFF;
 }

Index: musicbase.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/music/musicbase.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- musicbase.h	27 Jun 2003 02:54:05 -0000	1.4
+++ musicbase.h	1 Jul 2003 01:27:50 -0000	1.5
@@ -43,7 +43,7 @@
 
 class SkyMusicBase {
 public:
-	SkyMusicBase(SkyDisk *pSkyDisk);
+	SkyMusicBase(SkyDisk *pSkyDisk, OSystem *system);
 	virtual ~SkyMusicBase(void);
 	void loadSection(uint8 pSection);
 	void musicCommand(uint16 command);
@@ -54,6 +54,7 @@
 	
 protected:
 
+	OSystem *_system;
 	SkyDisk *_skyDisk;
 	uint8 *_musicData;
 	uint8 _allowedCommands;
@@ -68,6 +69,7 @@
 	uint32 _aktTime;
 	Actions _onNextPoll;
 	SkyChannelBase *_channels[10];
+	void *_mutex;
 	
 	virtual void setupPointers(void) = 0;
 	virtual void setupChannels(uint8 *channelData) = 0;





More information about the Scummvm-git-logs mailing list