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 /backends/midi/windows.cpp | |
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 'backends/midi/windows.cpp')
-rw-r--r-- | backends/midi/windows.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/backends/midi/windows.cpp b/backends/midi/windows.cpp index b585b71fbe..aad7f48d94 100644 --- a/backends/midi/windows.cpp +++ b/backends/midi/windows.cpp @@ -61,6 +61,7 @@ private: public: MidiDriver_WIN(int deviceIndex) : _isOpen(false), _device(deviceIndex) { } int open(); + bool isOpen() const { return _isOpen; } void close(); void send(uint32 b); void sysEx(const byte *msg, uint16 length); @@ -93,6 +94,8 @@ void MidiDriver_WIN::close() { } void MidiDriver_WIN::send(uint32 b) { + assert(_isOpen); + union { DWORD dwData; BYTE bData[4]; |