From 8982fff1b79aa3cc53a5c328b283e0f102cb647f Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 21 Mar 2011 15:42:17 +0100 Subject: AUDIO: Add pure virtual MidiDriver::isOpen() method This in turn enables modifying MidiDriver_MPU401::close() to allow it to be called on a midi driver that has not yet been opened. The specific issue that triggered me to make these changes was a crash-upon-quit in HUGO, caused by it instantiating a midi driver, then encountering an error (missing hugo.dat) *before* having opened the new midi driver; the general cleanup code then tries to close the (not yet opened) midi driver -> kaboom Also fixed some engines which were leaking MidiDriver instances. --- engines/queen/music.cpp | 4 +++- engines/queen/music.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'engines/queen') diff --git a/engines/queen/music.cpp b/engines/queen/music.cpp index 4dc698dac9..044717878b 100644 --- a/engines/queen/music.cpp +++ b/engines/queen/music.cpp @@ -78,8 +78,10 @@ MidiMusic::MidiMusic(QueenEngine *vm) _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); } } + assert(_driver); - _driver->open(); + int ret = _driver->open(); + assert(ret == 0); _driver->setTimerCallback(this, &timerCallback); if (_nativeMT32) diff --git a/engines/queen/music.h b/engines/queen/music.h index fe45d56fde..50f7b3d255 100644 --- a/engines/queen/music.h +++ b/engines/queen/music.h @@ -58,6 +58,7 @@ public: //MidiDriver interface implementation int open() { return 0; } + bool isOpen() const { return true; } void close() {} void send(uint32 b); -- cgit v1.2.3