From e98c7911064232cfe6715ce5e9f61dee88a3659b Mon Sep 17 00:00:00 2001 From: Andre Heider Date: Mon, 24 Aug 2009 22:41:56 +0000 Subject: Fixed iMuse regression: IMuseInternal::terminate() was never called, because the base class does not have that virtual function anymore. Code moved to the destructor. svn-id: r43714 --- engines/scumm/imuse/imuse.cpp | 60 ++++++++++++++++++------------------ engines/scumm/imuse/imuse_internal.h | 3 +- 2 files changed, 32 insertions(+), 31 deletions(-) (limited to 'engines/scumm') diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp index 455eaac984..409e1140f1 100644 --- a/engines/scumm/imuse/imuse.cpp +++ b/engines/scumm/imuse/imuse.cpp @@ -73,6 +73,36 @@ _snm_trigger_index(0) { memset(_volchan_table,0,sizeof(_volchan_table)); } +IMuseInternal::~IMuseInternal() { + // Do just enough stuff inside the mutex to + // make sure any MIDI timing threads won't + // interrupt us, and then do the rest outside + // the mutex. + { + Common::StackLock lock(_mutex, "IMuseInternal::~IMuseInternal()"); + _initialized = false; + stopAllSounds_internal(); + } + + if (_midi_adlib) { + _midi_adlib->close(); + delete _midi_adlib; + _midi_adlib = 0; + } + + if (_midi_native) { + if (_native_mt32) { + // Reset the MT-32 + _midi_native->sysEx((const byte *) "\x41\x10\x16\x12\x7f\x00\x00\x01\x00", 9); + _system->delayMillis(250); + } + + _midi_native->close(); + delete _midi_native; + _midi_native = 0; + } +} + byte *IMuseInternal::findStartOfSound(int sound) { byte *ptr = NULL; int32 size, pos; @@ -518,36 +548,6 @@ int IMuseInternal::getMusicTimer() const { return best_time; } -void IMuseInternal::terminate() { - // Do just enough stuff inside the mutex to - // make sure any MIDI timing threads won't - // interrupt us, and then do the rest outside - // the mutex. - { - Common::StackLock lock(_mutex, "IMuseInternal::terminate()"); - _initialized = false; - stopAllSounds_internal(); - } - - if (_midi_adlib) { - _midi_adlib->close(); - delete _midi_adlib; - _midi_adlib = 0; - } - - if (_midi_native) { - if (_native_mt32) { - // Reset the MT-32 - _midi_native->sysEx((const byte *) "\x41\x10\x16\x12\x7f\x00\x00\x01\x00", 9); - _system->delayMillis(250); - } - - _midi_native->close(); - delete _midi_native; - _midi_native = 0; - } -} - //////////////////////////////////////// // // Internal versions of the IMuse and diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h index 7e2bd03211..3ff2432f3e 100644 --- a/engines/scumm/imuse/imuse_internal.h +++ b/engines/scumm/imuse/imuse_internal.h @@ -445,6 +445,8 @@ protected: protected: IMuseInternal(); + virtual ~IMuseInternal(); + int initialize(OSystem *syst, MidiDriver *nativeMidiDriver, MidiDriver *adlibMidiDriver); static void midiTimerCallback(void *data); @@ -526,7 +528,6 @@ public: void stopAllSounds(); int getSoundStatus(int sound) const; int getMusicTimer() const; - void terminate(); public: // Factory function -- cgit v1.2.3