SDL_mixer: We get a MOM_DONE after a MOM_CLOSE message, so don't continue playing at that point

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;
     }