Jörg Höhle : winecoreaudio: Do not access MIDIHDR past notification callback.

Alexandre Julliard julliard at winehq.org
Mon Mar 14 14:29:36 CDT 2011


Module: wine
Branch: master
Commit: c0d6db394479ef48fe858efbb8e0f5b86bdb2109
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c0d6db394479ef48fe858efbb8e0f5b86bdb2109

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Wed Mar  9 01:51:08 2011 +0100

winecoreaudio: Do not access MIDIHDR past notification callback.

---

 dlls/winecoreaudio.drv/midi.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/dlls/winecoreaudio.drv/midi.c b/dlls/winecoreaudio.drv/midi.c
index 5e6eeae..d2b08e2 100644
--- a/dlls/winecoreaudio.drv/midi.c
+++ b/dlls/winecoreaudio.drv/midi.c
@@ -694,8 +694,8 @@ static DWORD MIDIIn_AddBuffer(WORD wDevID, LPMIDIHDR lpMidiHdr, DWORD dwSize)
 	LPMIDIHDR ptr;
 	for (ptr = sources[wDevID].lpQueueHdr;
 	     ptr->lpNext != 0;
-	     ptr = (LPMIDIHDR)ptr->lpNext);
-	ptr->lpNext = (struct midihdr_tag*)lpMidiHdr;
+	     ptr = ptr->lpNext);
+	ptr->lpNext = lpMidiHdr;
     }
     LeaveCriticalSection(&midiInLock);
 
@@ -806,11 +806,12 @@ static DWORD MIDIIn_Reset(WORD wDevID)
 
     EnterCriticalSection(&midiInLock);
     while (sources[wDevID].lpQueueHdr) {
-	sources[wDevID].lpQueueHdr->dwFlags &= ~MHDR_INQUEUE;
-	sources[wDevID].lpQueueHdr->dwFlags |= MHDR_DONE;
+	LPMIDIHDR lpMidiHdr = sources[wDevID].lpQueueHdr;
+	sources[wDevID].lpQueueHdr = lpMidiHdr->lpNext;
+	lpMidiHdr->dwFlags &= ~MHDR_INQUEUE;
+	lpMidiHdr->dwFlags |= MHDR_DONE;
 	/* FIXME: when called from 16 bit, lpQueueHdr needs to be a segmented ptr */
-	MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)sources[wDevID].lpQueueHdr, dwTime);
-	sources[wDevID].lpQueueHdr = (LPMIDIHDR)sources[wDevID].lpQueueHdr->lpNext;
+	MIDI_NotifyClient(wDevID, MIM_LONGDATA, (DWORD)lpMidiHdr, dwTime);
     }
     LeaveCriticalSection(&midiInLock);
 




More information about the wine-cvs mailing list