Ken Thomases : winecoreaudio:
Move notify of completed WAVEHDRs to end of wodReset.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Jun 20 09:13:45 CDT 2007
Module: wine
Branch: master
Commit: ed10114b12b23b809c4e08c77fb2b1386eed391b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ed10114b12b23b809c4e08c77fb2b1386eed391b
Author: Ken Thomases <ken at codeweavers.com>
Date: Wed Jun 20 07:01:07 2007 -0500
winecoreaudio: Move notify of completed WAVEHDRs to end of wodReset.
---
dlls/winecoreaudio.drv/audio.c | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/winecoreaudio.drv/audio.c b/dlls/winecoreaudio.drv/audio.c
index e5b3e7d..5a3e82b 100644
--- a/dlls/winecoreaudio.drv/audio.c
+++ b/dlls/winecoreaudio.drv/audio.c
@@ -1265,6 +1265,7 @@ static DWORD wodReset(WORD wDevID)
{
WINE_WAVEOUT* wwo;
OSStatus status;
+ LPWAVEHDR lpSavedQueuePtr;
TRACE("(%u);\n", wDevID);
@@ -1276,12 +1277,9 @@ static DWORD wodReset(WORD wDevID)
wwo = &WOutDev[wDevID];
- /* updates current notify list */
- /* if resetting, remove all wave headers and notify client that all headers were completed */
- wodHelper_NotifyCompletions(wwo, TRUE);
-
OSSpinLockLock(&wwo->lock);
+ lpSavedQueuePtr = wwo->lpQueuePtr;
wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL;
wwo->state = WINE_WS_STOPPED;
wwo->dwPlayedTotal = wwo->dwWrittenTotal = 0;
@@ -1298,6 +1296,11 @@ static DWORD wodReset(WORD wDevID)
return MMSYSERR_ERROR; /* FIXME return an error based on the OSStatus */
}
+ /* Now, send the "done" notification for each header in our list. */
+ /* Do this last so the reset operation is effectively complete before the
+ * app does whatever it's going to do in response to these notifications. */
+ wodHelper_NotifyDoneForList(wwo, lpSavedQueuePtr);
+
return MMSYSERR_NOERROR;
}
More information about the wine-cvs
mailing list