foxygit / doom Log in
commit 2c1917639f08dae3638437806eb74373fe9efbce
Author:     Roman Fomin <rfomin@gmail.com>
AuthorDate: Tue Nov 28 01:14:50 2023 +0700
Commit:     Roman Fomin <rfomin@gmail.com>
CommitDate: Tue Nov 28 01:14:50 2023 +0700

    Always reset buffer position after filling header fields
---
 src/i_winmusic.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 0f6d47fc..6871fe22 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -251,7 +251,6 @@ static void WriteBuffer(const byte *ptr, unsigned int size)
     {
         UnprepareHeader();
         buffer.prepared = false;
-        buffer.position = 0;
     }

     if (buffer.position + size >= buffer.size)
@@ -276,6 +275,9 @@ static void StreamOut(void)
     hdr->dwBytesRecorded = buffer.position;
     hdr->dwBufferLength = buffer.size;

+    // Reset buffer position even if midiStreamOut fails.
+    buffer.position = 0;
+
     mmr = midiOutPrepareHeader((HMIDIOUT)hMidiStream, hdr, sizeof(MIDIHDR));
     if (mmr != MMSYSERR_NOERROR)
     {