Module: wine Branch: master Commit: 63d0aeeafa24a2b62ffb917274468bd9a477ee71 URL: http://source.winehq.org/git/wine.git/?a=commit;h=63d0aeeafa24a2b62ffb917274...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Tue Feb 16 22:10:03 2010 +0100
winmm: Do not access MIDIHDR past MOM_DONE DriverCallback.
---
dlls/winmm/winmm.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c index 46a3c06..1898e28 100644 --- a/dlls/winmm/winmm.c +++ b/dlls/winmm/winmm.c @@ -1485,13 +1485,15 @@ static BOOL MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWI /* this is not quite what MS doc says... */ midiOutReset(lpMidiStrm->hDevice); /* empty list of already submitted buffers */ - for (lpMidiHdr = lpMidiStrm->lpMidiHdr; lpMidiHdr; lpMidiHdr = lpMidiHdr->lpNext) { - lpMidiHdr->dwFlags |= MHDR_DONE; - lpMidiHdr->dwFlags &= ~MHDR_INQUEUE; + for (lpMidiHdr = lpMidiStrm->lpMidiHdr; lpMidiHdr; ) { + LPMIDIHDR lphdr = lpMidiHdr; + lpMidiHdr = lpMidiHdr->lpNext; + lphdr->dwFlags |= MHDR_DONE; + lphdr->dwFlags &= ~MHDR_INQUEUE;
DriverCallback(lpwm->mod.dwCallback, lpMidiStrm->wFlags, (HDRVR)lpMidiStrm->hDevice, MM_MOM_DONE, - lpwm->mod.dwInstance, (DWORD_PTR)lpMidiHdr, 0); + lpwm->mod.dwInstance, (DWORD_PTR)lphdr, 0); } lpMidiStrm->lpMidiHdr = 0; SetEvent(lpMidiStrm->hEvent);