[Scummvm-cvs-logs] SF.net SVN: scummvm: [23605] scummvm/trunk/engines/kyra
lordhoto at users.sourceforge.net
lordhoto at users.sourceforge.net
Thu Jul 27 00:24:38 CEST 2006
Revision: 23605
Author: lordhoto
Date: 2006-07-26 15:24:33 -0700 (Wed, 26 Jul 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=23605&view=rev
Log Message:
-----------
Make the midi player threadsafe (this should fix bug #1506583 "KYRA1: Crash on exceeded polyphony").
Modified Paths:
--------------
scummvm/trunk/engines/kyra/sound.cpp
scummvm/trunk/engines/kyra/sound.h
Modified: scummvm/trunk/engines/kyra/sound.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sound.cpp 2006-07-26 20:39:27 UTC (rev 23604)
+++ scummvm/trunk/engines/kyra/sound.cpp 2006-07-26 22:24:33 UTC (rev 23605)
@@ -118,6 +118,11 @@
}
SoundMidiPC::~SoundMidiPC() {
+ stopMusic();
+ stopSoundEffect();
+
+ Common::StackLock lock(_mutex);
+
_driver->setTimerCallback(NULL, NULL);
close();
}
@@ -243,6 +248,8 @@
void SoundMidiPC::playMusic(uint8 *data, uint32 size) {
stopMusic();
+ Common::StackLock lock(_mutex);
+
_parserSource = data;
_parser = MidiParser::createParser_XMIDI();
assert(_parser);
@@ -278,6 +285,8 @@
void SoundMidiPC::loadSoundEffectFile(uint8 *data, uint32 size) {
stopSoundEffect();
+ Common::StackLock lock(_mutex);
+
_soundEffectSource = data;
_soundEffect = MidiParser::createParser_XMIDI();
assert(_soundEffect);
@@ -296,6 +305,8 @@
}
void SoundMidiPC::stopMusic() {
+ Common::StackLock lock(_mutex);
+
_isPlaying = false;
if (_parser) {
_parser->unloadMusic();
@@ -311,6 +322,8 @@
}
void SoundMidiPC::stopSoundEffect() {
+ Common::StackLock lock(_mutex);
+
_sfxIsPlaying = false;
if (_soundEffect) {
_soundEffect->unloadMusic();
@@ -323,6 +336,7 @@
void SoundMidiPC::onTimer(void *refCon) {
SoundMidiPC *music = (SoundMidiPC *)refCon;
+ Common::StackLock lock(music->_mutex);
// this should be set to the fadeToBlack value
static const uint32 musicFadeTime = 2 * 1000;
Modified: scummvm/trunk/engines/kyra/sound.h
===================================================================
--- scummvm/trunk/engines/kyra/sound.h 2006-07-26 20:39:27 UTC (rev 23604)
+++ scummvm/trunk/engines/kyra/sound.h 2006-07-26 22:24:33 UTC (rev 23605)
@@ -26,9 +26,12 @@
#include "common/stdafx.h"
#include "common/scummsys.h"
#include "common/file.h"
+#include "common/mutex.h"
+
#include "sound/mididrv.h"
#include "sound/midiparser.h"
#include "sound/mixer.h"
+
#include "kyra/kyra.h"
namespace Audio {
@@ -200,6 +203,8 @@
byte *_parserSource;
MidiParser *_soundEffect;
byte *_soundEffectSource;
+
+ Common::Mutex _mutex;
};
class MixedSoundDriver : public Sound {
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