diff options
| author | Max Horn | 2011-03-21 15:42:17 +0100 |
|---|---|---|
| committer | Max Horn | 2011-03-22 23:51:47 +0100 |
| commit | 8982fff1b79aa3cc53a5c328b283e0f102cb647f (patch) | |
| tree | 01e3835be4fcdf9acbbea5e7878e0c6cfdb5b5fe /engines/made | |
| parent | 92716d71edfe1b23482306e74a1d249c4f43bb0b (diff) | |
| download | scummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.tar.gz scummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.tar.bz2 scummvm-rg350-8982fff1b79aa3cc53a5c328b283e0f102cb647f.zip | |
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.
Diffstat (limited to 'engines/made')
| -rw-r--r-- | engines/made/music.cpp | 8 | ||||
| -rw-r--r-- | engines/made/music.h | 1 |
2 files changed, 8 insertions, 1 deletions
diff --git a/engines/made/music.cpp b/engines/made/music.cpp index 8c9248a262..5ace99788b 100644 --- a/engines/made/music.cpp +++ b/engines/made/music.cpp @@ -89,10 +89,16 @@ int MusicPlayer::open() { return 0; } +bool MusicPlayer::isOpen() const { + return _driver && _driver->isOpen(); +} + void MusicPlayer::close() { stop(); - if (_driver) + if (_driver) { _driver->close(); + delete _driver; + } _driver = 0; } diff --git a/engines/made/music.h b/engines/made/music.h index 9840c50cfa..024588ea4d 100644 --- a/engines/made/music.h +++ b/engines/made/music.h @@ -66,6 +66,7 @@ public: //MidiDriver interface implementation int open(); + bool isOpen() const; void close(); void send(uint32 b); |
