Ken Thomases : winecoreaudio: Move a memset out of a mutex-guarded section.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Dec 21 10:36:35 CST 2006


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

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Dec 21 03:50:09 2006 -0600

winecoreaudio: Move a memset out of a mutex-guarded section.

---

 dlls/winmm/winecoreaudio/audio.c |   61 ++++++++++++++++++-------------------
 1 files changed, 30 insertions(+), 31 deletions(-)

diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index a28057d..e5b9e41 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -1365,47 +1365,46 @@ OSStatus CoreAudio_woAudioUnitIOProc(voi
 
     pthread_mutex_lock(&wwo->lock);
 
-    while (dataNeeded > 0)
+    while (dataNeeded > 0 && wwo->state == WINE_WS_PLAYING && wwo->lpPlayPtr)
     {
-        if (wwo->state == WINE_WS_PLAYING && wwo->lpPlayPtr)
-        {
-            unsigned int available = wwo->lpPlayPtr->dwBufferLength - wwo->dwPartialOffset;
-            unsigned int toCopy;
-
-            if (available >= dataNeeded)
-                toCopy = dataNeeded;
-            else
-                toCopy = available;
+        unsigned int available = wwo->lpPlayPtr->dwBufferLength - wwo->dwPartialOffset;
+        unsigned int toCopy;
 
-            if (toCopy > 0)
-            {
-                memcpy((char*)ioData->mBuffers[0].mData + dataProvided,
-                    wwo->lpPlayPtr->lpData + wwo->dwPartialOffset, toCopy);
-                wwo->dwPartialOffset += toCopy;
-                wwo->dwPlayedTotal += toCopy;
-                dataProvided += toCopy;
-                dataNeeded -= toCopy;
-                available -= toCopy;
-            }
+        if (available >= dataNeeded)
+            toCopy = dataNeeded;
+        else
+            toCopy = available;
 
-            if (available == 0)
-            {
-                wodHelper_PlayPtrNext(wwo);
-                needNotify = 1;
-            }
+        if (toCopy > 0)
+        {
+            memcpy((char*)ioData->mBuffers[0].mData + dataProvided,
+                wwo->lpPlayPtr->lpData + wwo->dwPartialOffset, toCopy);
+            wwo->dwPartialOffset += toCopy;
+            wwo->dwPlayedTotal += toCopy;
+            dataProvided += toCopy;
+            dataNeeded -= toCopy;
+            available -= toCopy;
         }
-        else
+
+        if (available == 0)
         {
-            if (!dataProvided)
-                *ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;
-            memset((char*)ioData->mBuffers[0].mData + dataProvided, 0, dataNeeded);
-            dataProvided += dataNeeded;
-            dataNeeded = 0;
+            wodHelper_PlayPtrNext(wwo);
+            needNotify = 1;
         }
     }
 
     pthread_mutex_unlock(&wwo->lock);
 
+    /* We can't provide any more wave data.  Fill the rest with silence. */
+    if (dataNeeded > 0)
+    {
+        if (!dataProvided)
+            *ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;
+        memset((char*)ioData->mBuffers[0].mData + dataProvided, 0, dataNeeded);
+        dataProvided += dataNeeded;
+        dataNeeded = 0;
+    }
+
     /* We only fill buffer 0.  Set any others that might be requested to 0. */
     for (buffer = 1; buffer < ioData->mNumberBuffers; buffer++)
     {




More information about the wine-cvs mailing list