From df0dd9ab493a786faefd80b7c87f9ce9310821de Mon Sep 17 00:00:00 2001 From: Ove Kaaven Date: Tue, 20 Jun 2000 20:18:09 +0000 Subject: [PATCH] Fixed WHDR_DONE race condition. --- dlls/winmm/wineoss/audio.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dlls/winmm/wineoss/audio.c b/dlls/winmm/wineoss/audio.c index 832de6b108c..94f6a2db46f 100644 --- a/dlls/winmm/wineoss/audio.c +++ b/dlls/winmm/wineoss/audio.c @@ -475,12 +475,12 @@ static void wodPlayer_Notify(WINE_WAVEOUT* wwo, WORD uDevID, BOOL force) if (lpWaveHdr->reserved > tc && !force) break; + wwo->dwPlayedTotal += lpWaveHdr->dwBufferLength; + wwo->lpQueuePtr = lpWaveHdr->lpNext; + lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; lpWaveHdr->dwFlags |= WHDR_DONE; - wwo->dwPlayedTotal += lpWaveHdr->dwBufferLength; - wwo->lpQueuePtr = lpWaveHdr->lpNext; - TRACE("Notifying client with %p\n", lpWaveHdr); if (OSS_NotifyClient(uDevID, WOM_DONE, (DWORD)lpWaveHdr, 0) != MMSYSERR_NOERROR) { WARN("can't notify client !\n"); @@ -574,10 +574,6 @@ static DWORD CALLBACK wodPlayer(LPVOID pmt) case WINE_WM_HEADER: lpWaveHdr = (LPWAVEHDR)msg.lParam; - lpWaveHdr->dwFlags &= ~WHDR_DONE; - lpWaveHdr->dwFlags |= WHDR_INQUEUE; - lpWaveHdr->lpNext = 0; - /* insert buffer at the end of queue */ { LPWAVEHDR* wh; @@ -802,6 +798,10 @@ static DWORD wodWrite(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize) if (lpWaveHdr->dwFlags & WHDR_INQUEUE) return WAVERR_STILLPLAYING; + lpWaveHdr->dwFlags &= ~WHDR_DONE; + lpWaveHdr->dwFlags |= WHDR_INQUEUE; + lpWaveHdr->lpNext = 0; + TRACE("imhere[3-HEADER]\n"); PostThreadMessageA(WOutDev[wDevID].dwThreadID, WINE_WM_HEADER, 0, (DWORD)lpWaveHdr); -- 2.11.4.GIT