diff options
| -rw-r--r-- | engines/scumm/player_towns.cpp | 12 | ||||
| -rw-r--r-- | sound/softsynth/fmtowns_pc98/towns_audio.cpp | 1 | ||||
| -rw-r--r-- | sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp | 1 | ||||
| -rw-r--r-- | sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp | 1 | 
4 files changed, 9 insertions, 6 deletions
diff --git a/engines/scumm/player_towns.cpp b/engines/scumm/player_towns.cpp index fa19cb20fd..ee4caeaec1 100644 --- a/engines/scumm/player_towns.cpp +++ b/engines/scumm/player_towns.cpp @@ -164,7 +164,7 @@ int Player_Towns::allocatePcmChannel(int sound, int sfxChanRelIndex, uint32 prio  	if (_v2 && priority > 255) {  		chan = 8; -		if (_intf->callback(40, 0x47)) +		if (_intf->callback(40, 0x47) && _pcmCurrentSound[chan].index != 0xffff)  			_vm->_sound->stopSound(_pcmCurrentSound[chan].index);  	} else {  		for (int i = 8; i; i--) { @@ -218,8 +218,8 @@ Player_Towns_v1::Player_Towns_v1(ScummEngine *vm, Audio::Mixer *mixer) : Player_  }  Player_Towns_v1::~Player_Towns_v1() { -	delete[] _soundOverride;  	delete _driver; +	delete[] _soundOverride;  }  bool Player_Towns_v1::init() { @@ -590,11 +590,13 @@ Player_Towns_v2::Player_Towns_v2(ScummEngine *vm, IMuse *imuse, Audio::Mixer *mi  }  Player_Towns_v2::~Player_Towns_v2() { -	delete[] _sblData; -	delete[] _soundOverride;  	delete _intf; +  	if (_imuseDispose)  		delete _imuse; + +	delete[] _sblData; +	delete[] _soundOverride;  }  bool Player_Towns_v2::init() { @@ -725,6 +727,8 @@ void Player_Towns_v2::playPcmTrackSBL(const uint8 *data) {  	uint32 len = (READ_LE_UINT32(data) >> 8) - 2;  	int chan = allocatePcmChannel(0xffff, 0, 0x1000); +	if (!chan) +		return;  	delete[] _sblData;  	_sblData = new uint8[len + 32]; diff --git a/sound/softsynth/fmtowns_pc98/towns_audio.cpp b/sound/softsynth/fmtowns_pc98/towns_audio.cpp index 58e09f291b..f9c9529214 100644 --- a/sound/softsynth/fmtowns_pc98/towns_audio.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_audio.cpp @@ -226,7 +226,6 @@ TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfac  }  TownsAudioInterface::~TownsAudioInterface() { -	Common::StackLock lock(_mutex);  	reset();  	deinit();  	_ready = false; diff --git a/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp b/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp index 3cf4caf0d1..b711eccbe1 100644 --- a/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp @@ -1053,7 +1053,6 @@ TownsPC98_AudioDriver::TownsPC98_AudioDriver(Audio::Mixer *mixer, EmuType type)  }  TownsPC98_AudioDriver::~TownsPC98_AudioDriver() { -	Common::StackLock lock(_mutex);  	reset();  	deinit();  	_ready = false; diff --git a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp index 0a4984888d..dbd8e37cb7 100644 --- a/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp +++ b/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp @@ -907,6 +907,7 @@ bool TownsPC98_FmSynth::init() {  }  void TownsPC98_FmSynth::reset() { +	Common::StackLock lock(_mutex);  	for (int i = 0; i < _numChan; i++) {  		for (int ii = 0; ii < 4; ii++)  			_chanInternal[i].opr[ii]->reset();  | 
