foxygit / doom Log in
commit dde9b2c1bf6184d7d525ebbf52485549f31196ba
Author:     Roman Fomin <rfomin@gmail.com>
AuthorDate: Thu Dec 29 20:51:21 2022 +0700
Commit:     GitHub <noreply@github.com>
CommitDate: Thu Dec 29 14:51:21 2022 +0100

    win midi: Prevent rare `midiOutUnprepareHeader()` fail (#1564)

    Fix by ceski.
---
 src/i_winmusic.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 8eb10838..a9df6247 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -1460,6 +1460,10 @@ static void I_WIN_ShutdownMusic(void)

     if (buffer.data)
     {
+        // Windows doesn't always immediately clear the MHDR_INQUEUE flag, even
+        // after midiStreamStop() is called. There doesn't seem to be any side
+        // effect to just forcing the flag off.
+        MidiStreamHdr.dwFlags &= ~MHDR_INQUEUE;
         mmr = midiOutUnprepareHeader((HMIDIOUT)hMidiStream, &MidiStreamHdr,
                                      sizeof(MIDIHDR));
         if (mmr != MMSYSERR_NOERROR)