[Scummvm-cvs-logs] SF.net SVN: scummvm:[53074] scummvm/trunk

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Fri Oct 8 18:31:08 CEST 2010


Revision: 53074
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53074&view=rev
Author:   athrxx
Date:     2010-10-08 16:31:08 +0000 (Fri, 08 Oct 2010)

Log Message:
-----------
SCUMM/FM-TOWNS: fixed threading issue in sfx code

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/player_towns.cpp
    scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_audio.cpp
    scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
    scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp

Modified: scummvm/trunk/engines/scumm/player_towns.cpp
===================================================================
--- scummvm/trunk/engines/scumm/player_towns.cpp	2010-10-08 13:50:11 UTC (rev 53073)
+++ scummvm/trunk/engines/scumm/player_towns.cpp	2010-10-08 16:31:08 UTC (rev 53074)
@@ -164,7 +164,7 @@
 
 	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() {
+	delete _driver;
 	delete[] _soundOverride;
-	delete _driver;
 }
 
 bool Player_Towns_v1::init() {
@@ -590,11 +590,13 @@
 }
 
 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 @@
 	uint32 len = (READ_LE_UINT32(data) >> 8) - 2;
 	
 	int chan = allocatePcmChannel(0xffff, 0, 0x1000);
+	if (!chan)
+		return;
 
 	delete[] _sblData;
 	_sblData = new uint8[len + 32];

Modified: scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_audio.cpp
===================================================================
--- scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_audio.cpp	2010-10-08 13:50:11 UTC (rev 53073)
+++ scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_audio.cpp	2010-10-08 16:31:08 UTC (rev 53074)
@@ -226,7 +226,6 @@
 }
 
 TownsAudioInterface::~TownsAudioInterface() {
-	Common::StackLock lock(_mutex);
 	reset();
 	deinit();
 	_ready = false;

Modified: scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp
===================================================================
--- scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp	2010-10-08 13:50:11 UTC (rev 53073)
+++ scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_driver.cpp	2010-10-08 16:31:08 UTC (rev 53074)
@@ -1053,7 +1053,6 @@
 }
 
 TownsPC98_AudioDriver::~TownsPC98_AudioDriver() {
-	Common::StackLock lock(_mutex);
 	reset();
 	deinit();
 	_ready = false;

Modified: scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp
===================================================================
--- scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp	2010-10-08 13:50:11 UTC (rev 53073)
+++ scummvm/trunk/sound/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp	2010-10-08 16:31:08 UTC (rev 53074)
@@ -907,6 +907,7 @@
 }
 
 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();


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