From 6f1ed9a32f0c4ebfb1df111947bc2b2363cdecee Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Fri, 27 May 2022 11:09:52 -0700
Subject: [PATCH] We get a MOM_DONE after a MOM_CLOSE message, so don't
continue playing at that point
Fixes https://github.com/libsdl-org/SDL_mixer/issues/392
---
src/codecs/native_midi/native_midi_win32.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/codecs/native_midi/native_midi_win32.c b/src/codecs/native_midi/native_midi_win32.c
index 6bccd6a2..1b0c2f78 100644
--- a/src/codecs/native_midi/native_midi_win32.c
+++ b/src/codecs/native_midi/native_midi_win32.c
@@ -177,11 +177,11 @@ void CALLBACK MidiProc( HMIDIIN hMidi, UINT uMsg, DWORD_PTR dwInstance,
switch( uMsg )
{
case MOM_DONE:
- if ((song->MusicLoaded) && (dwParam1 == (DWORD_PTR)&song->MidiStreamHdr[song->CurrentHdr]))
+ if (song->MusicPlaying && song->MusicLoaded && (dwParam1 == (DWORD_PTR)&song->MidiStreamHdr[song->CurrentHdr]))
BlockOut(song);
break;
case MOM_POSITIONCB:
- if ((song->MusicLoaded) && (dwParam1 == (DWORD_PTR)&song->MidiStreamHdr[song->CurrentHdr])) {
+ if (song->MusicPlaying && song->MusicLoaded && (dwParam1 == (DWORD_PTR)&song->MidiStreamHdr[song->CurrentHdr])) {
if (song->Loops) {
if (song->Loops > 0)
--song->Loops;
@@ -192,6 +192,9 @@ void CALLBACK MidiProc( HMIDIIN hMidi, UINT uMsg, DWORD_PTR dwInstance,
}
}
break;
+ case MOM_CLOSE:
+ song->MusicPlaying=0;
+ break;
default:
break;
}